grep的使用方法
基本使用方法
grep是一種使用正則表達(dá)式的多用途文本搜索工具烁登。
通常的使用結(jié)構(gòu)如:
grep 'test' testfile.txt
假設(shè)testfile.txt中的內(nèi)容為:
te
test
testaaa
aatestbb
輸出為:
./testfile.txt:test
./testfile.txt:testaa
./testfile.txt:aatestbb
其中'test'
為要匹配的正則表達(dá)式殷勘,testfile.txt
為要搜索的文件婉陷。
若沒有指定文件碑隆,grep也可以在管道中對(duì)stdout進(jìn)行處理
ls | grep 'test'
輸出是:
testfile.txt
grep的常用參數(shù)
-i
在搜索的時(shí)候忽略大小寫
例如文件夾中有兩個(gè)文件testfile.txt
和TestFile.txt
湾趾。
運(yùn)行如下腳本:
echo 'first one'
ls | grep 'test'
echo 'second one'
ls | grep -i 'test'
將輸出:
first one
testfile.txt
second one
testfile.txt
TestFile.txt
-w
匹配整詞
即如果執(zhí)行
grep -w 'test' testfile.txt
將會(huì)匹配test
不會(huì)匹配testaa
-l
僅列出符合匹配的文件侮邀,而不列出匹配的具體行
例如:
grep -l 'test' testfile.txt
輸出為:
./testfile.txt
-L
列出不匹配的文件名函筋,與-l正好相反。
-r
不僅匹配當(dāng)前目錄再愈,還匹配其子目錄
-r選項(xiàng)在很多命令中都有涉及庶骄,這里就不贅述了。
-n
列出行并顯示行號(hào)
即按照上述的文件践磅,執(zhí)行命令
grep -n 'test' testfile.txt
得到的輸出會(huì)是:
2:test
3:testaaa
4:aatestbb
-v(--invert-match)
顯示所有不匹配的行
顧名思義
-c(--count)
顯示匹配到的行數(shù),而不會(huì)列出具體的匹配
所以執(zhí)行:
grep -c 'test' testfile.txt
會(huì)得到
./testfile.txt:2
-E或者使用egrep(mac中沒有)
使用擴(kuò)展的正則表達(dá)式灸异。
grep只會(huì)使用基本的正則表達(dá)式府适。因此我們需要-E選項(xiàng)來對(duì)正則表達(dá)式進(jìn)行擴(kuò)展。
例如上述文件肺樟,可以執(zhí)行:
grep -E 'testa|testb' testfile.txt
來匹配:
./testfile.txt:testaaa
./testfile.txt:aatestbb
其中或(|)是擴(kuò)展的正則表達(dá)式中的內(nèi)容檐春。
-F
快速的grep,只按照字符串字面上的意思進(jìn)行搜索么伯。不允許使用正則表達(dá)式疟暖。有時(shí)候這會(huì)更加方便
-h
不顯示匹配的文件名
-s
靜默執(zhí)行。只輸出錯(cuò)誤信息田柔,不輸出其他信息俐巴。
-Ax
在匹配行打印完畢后再打印x行
例如執(zhí)行:
grep -A1 'testa' testfile.txt
輸出:
./testfile.txt:testaaa
./testfile.txt:aatestbb
-By
在匹配行前打印y行
執(zhí)行:
grep -B1 'testa' testfile.txt
輸出:
./testfile.txt:test
./testfile.txt:testaaa
-Cz
在前后各自打印z行。
例如:
grep -C1 'testa' testfile.txt
輸出為:
./testfile.txt:test
./testfile.txt:testaaa
./testfile.txt:aatestbb
-b
在每一行前面打印字符的偏移量
-f
-f file
從文件file中提取模板硬爆⌒蓝妫空文件包含0個(gè)模板。
例如我們可以新建一個(gè)patternfile文件用于儲(chǔ)存模板缀磕。
內(nèi)容為:
test
testa
執(zhí)行:
grep -f patternfile testfile.txt
匹配結(jié)果為:
./testfile.txt:test
./testfile.txt:testaa
./testfile.txt:aatestbb
-x
只打印整行匹配的行