1. 程式人生 > >Linux之grep命令

Linux之grep命令

linu global 轉義 命令 點號 正則表達式grep -- ole 前三

global search regular expression(RE) and print out the line

一、命令形式

1. grep -n --color=auto ‘str‘ filename/dirname
2. cat filename | grep ……
3. grep -E ‘(str)+\.?[0-9a-zA-Z]..str.*‘
4. egrep ‘str1|str2‘
5. grep -F ‘*‘ ……
6. fgrep ‘*‘ ……

二、示例

1. grep 參數

* -n 行號
* --color=auto 結果顏色高亮顯示,一般在alias中定義即可
* -c 對結果行計數
* -i 不區分大小寫
* -v 反向搜索
* -m3 匹配行數達到3行後停止匹配 
* -A1 同時打印搜索結果行的後一行
* -B3 同時打印搜索結果行的前三行
* -r 遞歸查找(搜索區域是dirname時)
* -l 只顯示含搜索結果的文件路徑和名稱(搜索區域是dirname時)
* -E 擴展正則表達式
* -F 純字符搜索

2. 正則表達式(grep未擴展)

2.1 單個字符匹配[]

1. ‘t[ae]st‘ 可匹配taste和test(在t和st之間存在a或者e,而不是ae)
2. ‘t[a-z]st‘ 在t和st之間存在一個小寫字母
3. ‘t[a-zA-Z0-9]st‘ 在t和st之間存在一個大小寫字母或數字

2.2 行首匹配^

2.3 行尾匹配$

2.4 反向匹配[^]

1. ‘[^g]oo‘ 含有oo,且oo前沒有緊隨字符g;
    google不行,gooogle可以(goo不符合,但是ooo符合)
2. ‘oo[^g]‘ 含有oo, 且oo後沒有緊跟字符g;
3. ‘3[^0-9]8‘ 數字3和數字8之間,沒有其他數字
4. ‘^[^#]\.$‘ 不以‘#‘開頭,且以點號結尾(點號轉義)

2.5 任意單字符.

1. ‘g..le‘ g和le之間有兩個任意字符,如google

2.6 重復字符*

1. ‘go.*le‘ g和le之間有0到n個字符o,如gle、gole、goole
2. ‘goo.*le‘ gle就不符合啦,起碼得是gole
3. ‘g[a-z].*g‘ g和g之間有0到n個任意小寫字母

2.7 限定字符連續個數{},正則擴展,grep中需要轉義

1. ‘go\{2\}le‘ g和le之間的字符o必須重復2次,如goole
2. ‘go\{2,3\}le‘ 重復2到3次
3. ‘go\{2,\}le‘  重復2到n次

2.8 字符在同一行出現1到n次,正則擴展,grep需要轉義

‘360+‘ 匹配存在1個或者多個360的行
‘\(google\)\+‘ 同上

2.9 字符出現0或1次,正則擴展,grep需轉義

‘goo\?le‘  go和le之間存在一個o,或者不存在任何字符

2.10 存在字符a或者字母b,正則擴展,grep需轉義

‘google\|gooogle‘

3. 正則擴展(grep -E,或者egrep)

上面需要轉義的四個,在這裏不用轉義啦

1. ‘go{3}le‘
2. ‘(google)+‘
3. ‘goo?le‘
4. ‘goole|gooole‘

4. 純字符搜索(grep -F,或者fgrep)

‘*‘ 這裏寫啥就是啥,星號就是星號,沒有任何特殊含義

Linux之grep命令