linux三劍客之grep

grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。
 
reaexp:正則表達式(regular expressions)
常見程序支持reaexp:grep,sed,awk,vim,less,nginx,varnish
 
reaexp分兩類:
  基本正則表達式:BRE(base regular)
  擴展正則表達式:ERE(extension regular)
   grep -E,egrep
   用法:把正則表達式轉義符刪除
  正則表達式引擎:
   採用不一樣的算法,檢查處理正則表達式的軟件模塊
nginx


基本用法

grep [OPTIONS] PATTERN [FILE...]

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


OPTIONS:

 

  • -m # 匹配#行後中止匹配
  • -v 顯示不被匹配的行
  • -i 忽略大小寫
  • -o 只顯示匹配到的內容
  • -n 顯示匹配到的行號
  • -c 統計匹配行的行數
  • -q 靜默模式,不輸出任何信息
  • -A # 匹配到的後#行(after)
  • -B # 匹配到的前#行(before)
  • -C # 匹配到的先後#行
  • -e 實現多個選項間的邏輯or關係
  • grep -e "cat" -e "dog" file
  • -w 匹配整個單詞
  • -E 使用擴展正則表達式
  • -F 使用fgrep,不支持正則表達式
  • -f file 根據模式文件處理

字符匹配:


  • . 匹配任意單個字符
  • [] 匹配指定範圍的任意單個字符 例:[123] 僅匹配123中的任一字符
  • [^] 匹配指定範圍外的任意(單個)字符
  • [:space:]:全部水平和垂的空白字符(比[:blank:]包含的範圍廣)
  • [:blank:]:水平空白字符(空格和製表符)
  • [:punct:]:標點符號
  • [:alnum:]:字母和數字
  • [:alpha:]:a-z A-Z
  • [:lower:]:小寫字符
  • [:upper:]:大寫字符
  • [:digit:]:數字
  • [:cntrl:]:不可打印的控制字符(退格、刪除、警鈴...)
  • [:graph:]:可打印的空白
  • [:xdigit:]:十六進制數字

次數匹配: 


  • * 匹配任意次(包括0次) 貪婪模式能匹配多少就是多少
  • .* 匹配任意長度任意字符
  • \? 匹配其前面字符0次或1次(0次)
  • \+ 匹配其前面字符至少1次或以上
  • \{m,n\} 匹配其前面字符至少m次,至多n次
  • \{n\} 匹配其前面字符n次
  • \{m,\} 匹配其前面字符至少m次
  • \{,n\} 匹配其前面字符至多n次

位置錨定:


  • ^ 行首錨定
  • $ 行尾錨定
  • ^pattern$ 匹配整行
  •  ^$ 匹配空行
  •   ^[[:space:]] 匹配空白字符行
  • \< 詞首錨定
  • \> 詞尾錨定
  • \<pattern\> 匹配整個單詞

分組:


  • \(\) 將多個字符組合在一塊兒,組成一個總體
  • \1,\2,\3 後向引用,後向引用是表明分組匹配的最後結果,而不是正則表達式
  • \(stirng1\+(string2\)*\)
  •   \1:string1+\(string2\)*
  •   \2:string2
  • abc\|d 表示abc或者d
  • \(abc\|d\) 表示abc或者abd
  • ^\(a\|b\) 以a或b開頭的

grep匹配用法:


非惟一答案,如用法不對或可優化之處,請及時聯繫或評論git

  • 匹配ifconfig命令的全部ip地址
    ifconfig | grep  "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
  • 找出/etc/passwd中的兩位或三位數
    grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd
  • 匹配/etc/fstab開頭不是#號的行,且不是空行
    grep "^[^#]" /etc/fstab
  • 匹配分區使用率最大的的分區
    df | grep `df | grep "/dev/sd" | grep -o "[[:digit:]]\{1,3\}%" | sort -nr | head -1 ` | cut -d " " -f1
  • 顯⽰兩個⽤戶root、user的UID和默認shell
    grep "root\|user" /etc/passwd | cut -d ":" -f3,7
  • 匹配目錄基名
    echo "/etc/rc.d/init.d/functions" | grep -o "[^/]\+$"
  • 匹配目錄名
    echo "/etc/rc.d/init.d/" | grep -o "/.*[^/]" | grep -o "/.*/" | grep -o "/.*[^/]"
    echo "/etc/rc.d/init.d/" | grep -o "[^/]\+" | tail -1
相關文章
相關標籤/搜索