1. 程式人生 > >Linux之擴展正則表達式(egrep)

Linux之擴展正則表達式(egrep)

EGREP LINUX 擴展正則表達式

egrep:

 支持擴展的正則表達式實現類似於grep文本過濾功能:grep -E

   grep [OPTIONS] PATTERN [FILE...]
   grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
      選項:
        --color=auto:對匹配到的文本著色後高亮顯示:
        -i:ignorecase,忽略字符的大小寫:
        -o:僅顯示匹配到的字符串本身:
        -v, --invert-match:顯示不能被模式匹配到的行:
        -E, --extended-regexp:支持使用擴展的正則表達式元字符:
        -q, --quiet, --silent:靜默模式,即不輸出任何信息
        -G,支持基本正則表達式

        -A#:after,後#行
        -B#: before,前#行
        -C#:context,前後各#行
      擴展正則表達式的元字符:
         字符匹配:
              .:任意單個字符
              []:指定範圍內的單個字符
              [^]:指定範圍外的單個字符
             次數匹配:
               *:任意次,0,1或多次
               ?:0次或1次,其前字符可有可無
               +:其前字符至少1次
               {m}:期前的字符m次
               {m,n}:至少m次,至多n次
                {0,n}
                {m,}                              
         位置錨定:
               ^:行首錨定:
               $:行尾錨定:
               \<,\b:詞首錨定
               \>,\b:詞尾錨定:

         分組及引用:
            ():分組;括號內的模式匹配到的字符會被記錄於正則表達式引擎的內部變量中;
            後向引用:\1,\2....
         或:
           a|b:a或者b;
              C|cat: C或cat
              (c|C)cat:cat或Cat

      示例:
             1.顯示/etc/passwd文件中不以/bin/bash結尾的行: 
               ~]#egrep -v "/bin.bash" /etc/passwd                 
             2.找出/etc/passwd文件中兩位數或三位數;  
               ~]#egrep "\<[0-9]{2,3}\>"                
             3.找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg.文件中,至少以一個空白字符開頭,且後面非空白字符的行:
               ~]#egrep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
             4.找出"netstat -tan"命令中以‘LISTEN’後跟0,1或多個空白字符結尾的行

       示例:
          1、找出/proc/meminfo文件中,所有已大寫或小寫S開頭的行;至少有三種實現方式;
              (1)
               ~]#grep "^[Ss]" /proc/meminfo
              (2) 
               ~]#grep -i "^[s]" /proc/meminfo
              (3)
               ~]#egrep "^(s|S)" /proc/meminfo

           2.顯示當前系統上root、centos或user1用戶的相關信息;
              ~]#grep -E "^(root|centos|user1)\>" /etc/passwd
           3.找出/etc/rc.d/init.d/functions文件中某單詞後面跟一個小括號的行;
              ~]#grep -E -o "_[[:alnum:]]+\(\)" /etc/rc.d/init.d/functions
           4.使用ehco命令輸出一絕對路徑,使用egrep取出其基名;
              ~]#echo /etc/sysconfig | grep -E -o "[^/]+/?$"
              進一步:取出其路徑名:類似於對其執行dirname的結果:
           5.找出ifconfig命令結果中的1-255之間的數值;
              ~]#ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-9]|25[0-5])\>"
           6.添加用戶bash,testbash,basher以及nologin(其shell為/sbin/nologin;而後找出/etc/passwd文件中用戶同名shell名的行:
             ~]#grep -E "^([^:]+\>.*\1$" /etc/passwd
                            7.找出ifconfig命令結果中的ip地址;
                            ~]fconfig | grep ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}‘

Linux之擴展正則表達式(egrep)