grep與正則表達式

what, why, when, who, where, how


一、grep簡介

     grep是一種強大的文本搜索工具,他能夠根據用戶指定的文本模式對目標文件進行逐行搜索,顯示能夠被模式所匹配到的行當我們要從一個文檔中找我們需要的信息的時候,grep就被派上了用場。

grep可用於shell腳本的書寫,因爲grep通過返回一個狀態值來說明搜索的狀態,如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進行一些自動化的文本處理工作。


二、grep選項

      grep [OPTIONS] PATTERN [FILE...]

      grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]


                    -a 以文本文件方式搜索

                   -c 計算找到的符合行的次數

                   -i 忽略大小寫

                   -n 順便輸出行號

                   -v 反向選擇,即找 沒有搜索字符串的行

                               -o 僅顯示被模式匹配到的字符串,非整行

                               -E 支持擴展的正則表達式

--color=auto 將匹配到的內容加顏色


三、grep正則表達式


        正則表達式是一類字符所書寫出的模式(pattern),分爲基本正則表達式和擴展正則表達式。而元字符即爲模式中那些不表示字符本身的意義,用於額外功能性的描述的字符。

     2.1、  基本正則表式的元字符:

           2.1.1 、字符匹配:用來指定匹配到的字符

                     .                       : 任意單個字符

               []                       : 指定範圍內的任意單個字符

               [0-9], [[:digit:]]    :匹配數字

               [a-z], [[:lower:]]   :匹配所有小寫字母

               [A-Z], [[:upper:]] :匹配所有大寫字母

               [[:alpha:]]           :匹配所有字符

               [[:alnum:]]          :匹配所有數字和字母

               [[:space:]]          :匹配空格

               [[:punct:]]           :匹配所以標點符號

               [^]                       :指定範圍外的任意單個字符

          2.1.2、次數匹配:用來指定匹配其前面的字符的次數

               *                         : 匹配前面的字符任意次

               .*                        : 匹配任意長度的任意字符

               \?                       : 0次或1次

               \{m\}                   :匹配m次

               \{m,n\}                :至少m次,之多n次

               \{m,\}                  : 至少m次;

               \{0,n\}                 :至多n次;

        2.1.3、位置錨定:用於指定字符出現的位置

                     \<                      :錨定詞首

                 >\                      :錨定詞尾

               ^Char                 :錨定行首

                    Char$:               :錨定行尾

                ^$:                     :空白行

        2.1.2、分組;講模式匹配到的字符進行分組用於後向引用。

           \(\)

           \(ab\)*xy

           引用:

           \1: 後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容

           \2:向後引用,引用前面的第二個左括號以及與之對應的右括號中的模式所匹配到的內容

           ...

                  例如: \(a.b\)xy\1: a6bxya6b,

     2.2、  擴展正則表式的元字符:

                      擴展正則表達式跟基本差不多,只是多了”+“,”|“,兩個元字符。而且擴展正則中除了詞首詞尾錨定時使用“\"外,其餘的元字符不用像基本正則一樣加“\”號

                      +: 匹配其前面的字符至少1次

                      |: 或者, abc|de

                                    匹配“|”兩側的字符“abc”或“de”,如果僅僅匹配”abce“或“abde”應該用分組“()“將其引用,形如ab(c|d)e”。




一、用法實例

      grep有兩種用法,一種是通過管道傳遞參數給grep命令來處理

        例如:

[root@station57 subsys]# ifconfig | grep -n --colour=auto "inet"
2:          inet addr:172.16.251.57  Bcast:172.16.255.255  Mask:255.255.0.0
3:          inet6 addr: fe80::20c:29ff:fe88:4f85/64 Scope:Link
11:          inet addr:127.0.0.1  Mask:255.0.0.0
12:          inet6 addr: ::1/128 Scope:Host

      用法二;

    grep 直接加文件路徑

        例如;

1、顯示/porc/meminfo文件中以大小寫s開頭的行

[root@station57 subsys]# grep "^[sS]" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097144 kB
SwapFree:        2097144 kB
Shmem:               244 kB
Slab:              36484 kB
SReclaimable:      11576 kB
SUnreclaim:        24908 kB
[root@station57 subsys]#

2、顯示/etc/rc.d/rc.sysinit文件中,以#開頭,後邊跟至少一個空白字符。而後又有至少一個非空白字符的行

[root@station57 subsys]# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit
# /etc/rc.d/rc.sysinit - run once at boot time
# Taken in part from Miquel van Smoorenburg's bcheckrc.
# Check SELinux status
# Print a text banner.
# Only read this once.
# Initialize hardware
# Set default affinity
3、找出、


3、找出/etc/passwd 中一位數和兩位數的行


[root@station57 subsys]# grep -E "\<[0-9]{1,2}\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin/4.


4、找出ifconfig命令中1到255之間的整數

[root@station57 subsys]# ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-9])\>"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:88:4F:85
          inet addr:172.16.251.57  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe88:4f85/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:8962707 (8.5 MiB)  TX bytes:1911419 (1.8 MiB)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-9])\>"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:88:4F:85
          inet addr:172.16.251.57  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe88:4f85/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:8962707 (8.5 MiB)  TX bytes:1911419 (1.8 MiB)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章