40 個(gè) Grep 命令 ! 運(yùn)維記住了
grep是Linux系統(tǒng)中的一個(gè)文本搜索工具, 它就像一個(gè)文本世界的“放大鏡”,能幫我們?cè)诖罅课谋局锌焖僬业胶刑囟▋?nèi)容的行。
無論是查看文件、分析日志,還是處理各種文本數(shù)據(jù),grep都能大顯身手,是系統(tǒng)管理員和開發(fā)人員的得力助手,

grep能干啥
- 快速定位信息 :在海量文本中,grep能瞬間定位到包含目標(biāo)關(guān)鍵詞的行,讓我們不用逐行瀏覽,省時(shí)省力
- 分析日志 :排查系統(tǒng)故障時(shí),通過grep篩選日志文件中的錯(cuò)誤信息,能幫我們迅速找到問題根源
- 提取數(shù)據(jù) :從雜亂的文本數(shù)據(jù)中,精準(zhǔn)提取出符合特定格式或要求的部分,方便后續(xù)處理
基礎(chǔ)入門篇
1.grep "hello" file.txt
作用:在 file.txt 文件里,搜索所有包含 “hello” 這個(gè)詞的行
2.grep -i "hello" file.txt
作用:-i 忽略大小寫。這樣 “Hello”, “HELLO” 都能被搜到
3.grep -w "hello" file.txt
作用:-w 全字匹配。只匹配獨(dú)立的單詞 “hello”,像 “hello-world” 或者 “helloworld” 就不會(huì)被匹配
4.grep -v "error" file.txt
作用:-v 反向選擇。顯示所有不包含 “error” 的行,用來過濾掉不想要的信息特別有用
5.grep -n "hello" file.txt
作用:-n 顯示行號(hào)。在結(jié)果前面會(huì)標(biāo)出這行在文件中的第幾行,方便你定位
6.grep -c "hello" file.txt
作用:-c 計(jì)數(shù)。不顯示具體內(nèi)容,只告訴你含有 “hello” 的行總共有多少行
7.grep -r "hello" /path/to/dir/
作用:-r 遞歸搜索。在一個(gè)目錄及其所有子目錄、子文件里搜索 “hello”
8.grep -l "hello" *.txt
作用:-l 只顯示文件名。在一堆 .txt 文件里,哪個(gè)文件包含了 “hello”,就只列出它的文件名
9.grep -h "hello" *.txt
作用:當(dāng)搜索多個(gè)文件時(shí),默認(rèn)會(huì)顯示文件名。-h 可以隱藏文件名,只顯示匹配的內(nèi)容
10.grep -o "hello" file.txt
作用:-o 只輸出匹配到的部分。比如一行是 “abc hello def”,用這個(gè)命令就只輸出 “hello”,非常干凈
正則表達(dá)式篇!
11.grep "^hello" file.txt
作用:^ 表示行首。搜索所有以 “hello” 開頭的行
12.grep "world$" file.txt
作用:$ 表示行尾。搜索所有以 “world” 結(jié)尾的行
13.grep "^$" file.txt
作用:匹配所有空行
14.grep "." file.txt
作用:. 匹配任意一個(gè)字符。這會(huì)匹配幾乎所有非空行
15.grep "he..o" file.txt
作用:搜索像 “hello”, “hexlo”, “heABo” 這樣的模式,中間兩個(gè)點(diǎn)代表兩個(gè)任意字符
16.grep "h[aeiou]llo" file.txt
作用:[ ] 匹配括號(hào)內(nèi)任意一個(gè)字符。這里會(huì)匹配 “hallo”, “hello”, “hillo”, “hollo”, “hullo”
17.grep "[0-9]" file.txt
作用:匹配所有包含任何數(shù)字的行
18.grep "[a-z]" file.txt
作用:匹配所有包含任何小寫字母的行
19.grep "[A-Z]" file.txt
作用:匹配所有包含任何大寫字母的行
20.grep "hello\|world" file.txt
作用:\| 是“或”的意思。匹配包含 “hello” 或者 包含 “world” 的行
21.grep "he*" file.txt
作用:* 表示前面的字符出現(xiàn)0次或多次。這里會(huì)匹配 “he”, “hee”, “heee” 等。注意:它也會(huì)匹配 “h”,因?yàn)?nbsp;e 出現(xiàn)了0次
22.grep "he\+" file.txt
作用:\+ 表示前面的字符出現(xiàn)至少1次。這里會(huì)匹配 “he”, “hee”, “heee” 等,但不會(huì)匹配只有 “h” 的行
23.grep "he\?“ file.txt
作用:\? 表示前面的字符出現(xiàn)0次或1次。會(huì)匹配 “h” 或 “he”
24.grep “h.\?o“ file.txt
作用:匹配 “h” 和 “o” 中間有0個(gè)或1個(gè)任意字符的模式,如 “ho”, “hxo”
25.grep -E “hello{2,}” file.txt
作用:-E 啟用擴(kuò)展正則,{2,} 表示前面的 ‘o’ 至少連續(xù)出現(xiàn)2次。會(huì)匹配 “helloo”, “hellooo” 等。
高級(jí)技巧
26.grep -A 2 “error” file.txt
作用:-A 顯示匹配行之后的2行內(nèi)容??村e(cuò)誤日志時(shí),連錯(cuò)誤信息下面的上下文一起看
27.grep -B 2 “error” file.txt
作用:-B 顯示匹配行之前的2行內(nèi)容。看錯(cuò)誤發(fā)生前發(fā)生了什么
28.grep -C 2 “error” file.txt
作用:-C 顯示匹配行前后各2行的內(nèi)容。最常用的上下文查看模式
29.ps aux | grep “nginx”
作用:經(jīng)典組合!查看所有進(jìn)程,然后過濾出和 “nginx” 相關(guān)的進(jìn)程
30.history | grep “ssh”
作用:從你的歷史命令里,快速找到所有包含 “ssh” 的命令
31.grep -e “error” -e “fail” file.txt
作用:-e 指定多個(gè)模式。相當(dāng)于同時(shí)搜索 “error” 和 “fail”
32.grep -f patterns.txt file.txt
作用:-f 從文件 patterns.txt 中讀取要搜索的模式列表,一行一個(gè)模式
33.grep –color=auto “hello” file.txt
作用:讓匹配到的 “hello” 高亮顯示,通常是紅色,非常醒目
34.grep -q “success” file.txt && echo “Found!”
作用:-q 靜默模式。不輸出任何結(jié)果,只根據(jù)是否找到而設(shè)置退出狀態(tài)。這里如果找到 “success”,就執(zhí)行 echo “Found!”。常用于腳本判斷
35.grep -s “hello” maybe_no_exist.txt
作用:-s 不顯示由于文件不存在或無權(quán)限而產(chǎn)生的錯(cuò)誤信息。世界清靜了
36.grep -H “hello” *.txt
作用:強(qiáng)制顯示文件名,和 -h 相反。在某些情況下默認(rèn)不顯示文件名時(shí)使用
37.ls -l | grep “^d”
作用:用 ls -l 列出文件詳情,然后 grep 只顯示行首是 ‘d’ 的,也就是只列出目錄
38.grep -P “\x68\x65\x6c\x6c\x6f” file.txt
作用:-P 使用Perl兼容的正則表達(dá)式,這里是用16進(jìn)制碼搜索 “hello” 這個(gè)單詞,比較偏門但有時(shí)有用
39.grep -m 5 “info” huge_log.txt
作用:-m 限制匹配次數(shù)。只在巨大的日志文件里搜到前5個(gè) “info” 就停止,防止輸出刷屏
40.grep -Z -r “secret” . | xargs -0 rm
作用:這是一個(gè)危險(xiǎn)但能說明問題的例子。-Z 讓輸出以 \0 結(jié)尾,配合 xargs -0,可以遞歸找到所有包含 “secret” 的文件并刪除它們
希望這40個(gè)例子能讓你對(duì) grep 的強(qiáng)大有一個(gè)立體的感受。記住,最好的學(xué)習(xí)方式就是打開終端,隨便找個(gè)文本文件,把這些命令一個(gè)一個(gè)敲進(jìn)去試試看 !玩得開心



























