grep正規表示式詳解

pathfinder_cui發表於2015-09-01
grep:(global search regular expression(RE)and print out the line)

文字搜尋工具,根據使用者指定的文字模式對目標檔案進行逐行搜尋,並顯示匹配的行

格式:grep [options] 'PATTERF' file,預設只支援基本正規表示式,要匹配額外功能的字元用-E
選項:
  --color 指定顏色
  -v:反向匹配,顯示不能被模式匹配到的行
  -o:僅匹配被模式匹配到的字串,而非整行
  -i:不區分大小寫,ignore-case
  -E:支援擴充套件
  -A #:還顯示模式下面的一行
  -B #:還顯示模式上面的一行
  -C #:前後各顯示一行


正規表示式:是一類字元所書寫出的模式(pattern)
    元字元:類似統配符,不表示字元本身的意義,用於額外功能性的描述

    基本正規表示式和擴充套件正規表示式
    基本正規表示式的元字元:
        .:任意單個字元
    []:指定範圍內的任意單個字元
     [0-9],[[:digit:]]
     [a-z],[[:lower:]]
     [A-Z],[[:upper:]]
     所有的字母:[[:alpha:]]
     字母+數字:[[:alnum:]]
     空格:[[:space:]]
     標點符號:[[:putct:]]
    [^]: 指定範圍外的任意單個字元
     次數匹配:用來指定匹配其前面的字元的次數
        *:任意次
       例子:x*y xxy xy y 都能匹配
        .*:匹配任意長度的任意字元
    \?:前面字元出現0次或者1次的
    \{m\}:匹配m次
    \{m,n\}:至少m次,至多n次
    \{m,\}:至少m次
    \{0,n}:至多n次
     做變數換算需要使用”“
   貪婪模式:儘可能的長的去匹配字元:

   位置錨定:用於指定字元出現的位置
       ^:錨定行首
         ^Char
       $:錨定行尾
          grepchar$
    ^$:空白行
    單詞的位置錨定
    \<char :錨定詞首,\b
    char\> : 錨定詞尾,char\b
    分組:
    \(\)
      \(ab\)*xy
     引用:
         \1:後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式匹配到的內容,意思是說前面出現一次,在\1這也要出現一次
 
      
練習:
1、顯示/proc/meminfo檔案中的以大小寫s的開頭的行
grep -i "^s" /proc/meminfo
2、取出預設shell為非bash的使用者
grep -v "bash$" /etc/passwd |cut -d: -f1
3、取出預設shell為bash的且其ID號最大的使用者
grep "bash$" /etc/passwd |cut -d: -f1|sort -n -t: -k3|tail -1
4、顯示/etc/rc.d/rc.sysinit檔案中,以#開頭,後面跟至少一個空白字元,而後又有至少一個非空白字元的行
 grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit
5、顯示/boot/grub/grub.conf中以至少一個空白字元的行
grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
6、查出/etc/passwd中一位數或兩位數
grep --color=auto "\<[0-9]\{1,2\}\>" /etc/passwd
7、找出ifconfig命令結果中的1到255之間的整數
 ifconfig |grep -E --color=auto "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
8、檢視當前系統上root使用者的所有資訊
grep “\<root\>”/etc/passwd
9、新增使用者bash和testbash,而後找出當前系統上於其他使用者名稱和預設shell相同的使用者
grep “^\([[:alnum:]]\{1,\}\)\>.*\1$” /etc/passwd
10、找出netstat -tan命令執行的結果中以“LISTEN”或“ESTABLISHEN”結尾的行
metstat -tan |grep -E “(LISETN|ESTABLISHED)[[:space:]]*"
11、取出當前系統上所有使用者的shell,要求:每種shell中顯示一次,且升序排序顯示
cut -d: -f7 /etc/passwd|sort -u
挑戰題:


grep egrep fgrep
egrep:使用擴充套件正規表示式來構建模式,相當於 grep -E
     元字元:
      字元匹配:
      .:任意單個字元
      []:指定範圍內的任意單個字元
      [^]:指定範圍外的任意單個字元
      次數匹配
       *:匹配器前面的字元任意次
       ?:匹配器前面的字元0或1次
       +:匹配其前面字元至少一次
       {m}:匹配其前面字元m次
       {m,n}:至少m次,至多n次
       {m,}:至少m次
       {0,n}:只讀n次
       分組:
       ():分組
       |:或者,ac|bc ac或者bc

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29620572/viewspace-1788064/,如需轉載,請註明出處,否則將追究法律責任。

相關文章