前言:
本文僅限于grep的正則應(yīng)用。
標(biāo)準(zhǔn)正則、擴(kuò)展正則等見文檔 《正則》
1. 簡單應(yīng)用
1.1 語法
grep [選項] “查找內(nèi)容” 文件1 文件2
返回值:
0,找到。1,沒找到。2,找不到指定文件。
1.2 選項
-i :忽略大小寫
-n :在每一行前面加上它在文件中的相對行號
-c :顯示成功匹配的行數(shù)
-s :禁止顯示文件不存在或文件不可讀的錯誤信息
-q :靜默
-v :只顯示不匹配的行
-R,-r :遞歸
--color : 顏色
-o :只顯示匹配的內(nèi)容
-B3 :顯示匹配行和前面3行的內(nèi)容(注意不空格)
-A3 :顯示匹配行和后面3行的內(nèi)容
-C3 :顯示匹配行和前后3行的內(nèi)容
1.3 示例
已有文件及內(nèi)容如下:
# cd /tmp/test
# cat 1.txt
abc
#cat 2.txt
ABC
#cat 3.txt
123
abc
123
#cat a/a1.txt
abc
- 列出指定目錄下包含abc的文件名
# grep abc /tmp/test/*
/tmp/test/1.txt:abc
/tmp/test/3.txt:abc
grep: /tmp/test/a: 是一個目錄
- 列出指定目錄及子目錄下包含123的文件名
# grep -r abc /tmp/test/*
/tmp/test/1.txt:abc
/tmp/test/3.txt:abc
/tmp/test/a/a1.txt:abc
- 列出abc所在行的序號
# grep -n abc /tmp/test/*
/tmp/test/1.txt:1:abc
/tmp/test/3.txt:2:abc
grep: /tmp/test/a: 是一個目錄
- 列出passwd中root用戶及后邊3行內(nèi)容
# grep -A3 ^root --color /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
2. 正則應(yīng)用
- grep支持的元字符
^, $, ., *, [], [^], < >,(),{}
- 擴(kuò)展元字符
語法:# egrep 或 # grep -E
元字符集: ?, +, { }, |, ( )
注:grep也可以使用擴(kuò)展集中的元字符,僅需要對這些元字符前置一個反斜線
- 其他
\w 所有字母與數(shù)字
\W 非字符(所有字母與數(shù)字之外的字符) 'love[^a-zA-Z0-9]+' 'love\W+'
\b 詞邊界 '\blove\b' 等同于'<love>'</love>
【示例】列出所有包含數(shù)字和字母的文件名
# grep "\w" /tmp/test/*.txt
/tmp/test/1.txt:abc
/tmp/test/2.txt:ABC
/tmp/test/3.txt:123
/tmp/test/3.txt:abc
/tmp/test/3.txt:123
說明:
\w必須加引號
3. 邏輯應(yīng)用
grep 的 and、or、not
3.1 邏輯否(not)
- 語法
# grep -v
3.2 邏輯和(and)
- 兩個層grep
# cat 1.txt |grep AAA | grep BBB
- 用正則匹配
3.3 邏輯或(or)
3.3.1 利用符號|
不推薦,感覺寫起來比較亂
- grep直接執(zhí)行
# grep '1\|3' 1.txt
說明:引號必須(單雙沒有區(qū)別)、
|必須有、\必須有
- grep -E 或 egrep
# grep -E '1|3' 1.txt
說明:和前例區(qū)別就是不用加反斜杠
3.3.2 grep -e
# grep -e 1 -e 3 1.txt
3.3.3 利用數(shù)組
- 使用數(shù)組
不建議,會被打碎為單個字符
# grep "[ac]" *
1.txt:abc
3.txt:abc

說明:
[ ] 里的內(nèi)容會被認(rèn)為是一個個分開的字符
里邊的符號也被當(dāng)做字符處理(除 -之外),這一點是和shell數(shù)組的區(qū)別。
- 連續(xù)區(qū)間
# grep "[a-c]" *
1.txt:abc
3.txt:abc

