Linux grep 命令到底有多強(qiáng)?90% 的人只會(huì)用最簡(jiǎn)單的用法!
你有沒(méi)有遇到過(guò)這種情況?
- 日志文件太大,想找某個(gè)關(guān)鍵字,翻得眼花繚亂?
- 代碼里某個(gè)變量到底在哪改的,找半天都沒(méi)找到?
- 成百上千個(gè)文件里,想找某個(gè)特定的內(nèi)容,手動(dòng)翻找效率太低?
如果你還在一行行地 Ctrl + F 查找內(nèi)容,那你真的該認(rèn)識(shí)一下 Linux 里最強(qiáng)大的查找工具——grep!它不僅能幫你 快速定位 關(guān)鍵內(nèi)容,還能 支持正則匹配、多文件查找、高亮顯示,讓你在海量數(shù)據(jù)中一秒找到目標(biāo)!
今天,我們就用 大白話 + 實(shí)戰(zhàn) 帶你徹底學(xué)會(huì) grep,讓你告別低效查找,成為 Linux 命令行高手!
一、grep 到底是干嘛的?
一句話總結(jié): grep 是 Linux 里的 文本搜索神器,能在 文件、日志、代碼 里 快速搜索 你想找的內(nèi)容。
比如,你有個(gè)日志文件 server.log,想找出里面 出現(xiàn) “error” 的所有行,如果你用鼠標(biāo)翻,可能要幾分鐘,但用 grep 只要 1 秒鐘:
grep "error" server.log
是不是很酷?接下來(lái),我們就來(lái)看看 grep 的常用玩法!
二、最常用的 grep 語(yǔ)法
1. 基本用法:查找關(guān)鍵詞
查找文件中包含某個(gè)關(guān)鍵詞的行
grep "hello" myfile.txt
解釋:這個(gè)命令會(huì)在 myfile.txt 里查找 包含 "hello" 的所有行,然后把結(jié)果打印出來(lái)。
2. 忽略大小寫(xiě)
大小寫(xiě)不敏感匹配(比如 Error 和 error 都能找到)
grep -i "error" server.log
解釋:-i 讓 grep忽略大小寫(xiě),比如 ERROR、Error、error,統(tǒng)統(tǒng)都能匹配出來(lái)!
3. 遞歸查找:在多個(gè)文件中查找
想找某個(gè)關(guān)鍵詞在哪個(gè)文件里出現(xiàn)了?
grep -r "main()" .
解釋:
- -r 讓 grep 進(jìn)入 當(dāng)前目錄的所有文件和子目錄 里查找 "main()"。
- 這個(gè)對(duì) 查找代碼里的某個(gè)函數(shù)、某個(gè)變量 非常有用!
4. 顯示行號(hào)
查找時(shí)順便顯示行號(hào),方便定位
grep -n "password" config.txt
解釋:-n 讓 grep 顯示匹配的行 在文件里的行號(hào),這樣你就能一眼找到它在哪。
5. 只顯示匹配的文件
當(dāng)你在一堆文件里找內(nèi)容時(shí),只想知道哪些文件包含這個(gè)關(guān)鍵詞
grep -l "TODO" *.c
解釋:-l 只顯示 包含 "TODO" 的文件名,不會(huì)輸出具體匹配內(nèi)容。
6. 反向查找(排除某些內(nèi)容)
想找不包含某個(gè)關(guān)鍵詞的行?
grep -v "debug" log.txt
解釋:-v 讓 grep排除 包含 "debug" 的行,輸出 不含 "debug" 的內(nèi)容。
7. 顯示匹配的上下文
只看匹配行可能不夠,想看看前后幾行內(nèi)容?
grep -C 5 "error" server.log
解釋:-C 5 讓 grep顯示匹配行前后 5 行,這樣你就能看到錯(cuò)誤前后發(fā)生了什么。
8. 高亮顯示匹配內(nèi)容
讓匹配的部分更醒目
grep --color "error" server.log
解釋:--color 讓 grep高亮顯示匹配的內(nèi)容,這樣你就能更快地看到關(guān)鍵部分。
注意:加不加 --color 參數(shù),可能顯示結(jié)果都一樣,因?yàn)橄到y(tǒng)默認(rèn)啟用了 --color=auto 參數(shù)。
9. 結(jié)合 -c,統(tǒng)計(jì)匹配的行數(shù)
統(tǒng)計(jì) log.txt 里包含 "error" 的行數(shù)
grep -c "error" log.txt
解釋:-c只統(tǒng)計(jì)匹配的行數(shù),不輸出具體內(nèi)容。
適用場(chǎng)景:快速檢查某個(gè)關(guān)鍵詞在文件中出現(xiàn)的次數(shù),比如日志里有多少行是錯(cuò)誤信息。
10. 結(jié)合 -o,只輸出匹配的關(guān)鍵內(nèi)容
從日志中提取所有 IP 地址
grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" logs.txtgrep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" logs.txt
解釋:
- -o只輸出匹配的部分,而不是整行內(nèi)容。
- -E啟用正則,匹配 IPv4 地址。
適用場(chǎng)景:當(dāng)你只想提取某些關(guān)鍵信息時(shí),比如 提取 IP、URL、郵箱等。
11. 結(jié)合 -m,限制匹配的行數(shù)
?? 查找文件中的 "error",但最多只輸出前 3 行
grep -m 3 "error" server.log
解釋:-m 3最多匹配 3 行,即使文件里有更多匹配項(xiàng),也只顯示 3 行。
適用場(chǎng)景:當(dāng)你只想看 部分匹配內(nèi)容,避免輸出太多信息時(shí)。
12. 結(jié)合 -w,精確匹配完整單詞
只匹配完整的 "error",不匹配 "error_code" 或 "myerror"
grep -w "error" server.log
解釋:-w匹配完整單詞,比如 "error",但不會(huì)匹配 "myerror" 或 "error_code"。
適用場(chǎng)景:查找變量名、關(guān)鍵字,避免匹配到無(wú)關(guān)內(nèi)容。
13. 結(jié)合 -F,精準(zhǔn)匹配,不使用正則
查找包含 [ERROR] 的日志行
grep -F "[ERROR]" logs.txt
解釋:
- -F把搜索內(nèi)容當(dāng)作普通字符串,不會(huì)當(dāng)成正則表達(dá)式解析。
- 避免 [ ] . * + 這些符號(hào)被誤認(rèn)為正則表達(dá)式。
適用場(chǎng)景:當(dāng)搜索的內(nèi)容包含 特殊字符,但你不想用正則時(shí)。
三、進(jìn)階用法:組合 grep 選項(xiàng),讓查找更高效!
在實(shí)際使用中,單獨(dú)使用 grep 可能不夠靈活,很多時(shí)候我們需要 組合多個(gè)選項(xiàng),讓 grep 更加強(qiáng)大!下面是幾種常見(jiàn)的組合用法:
1. 結(jié)合 -r 和 -n,遞歸查找并顯示行號(hào)
?? 在當(dāng)前目錄及子目錄中,查找 "error",并顯示行號(hào)
grep -rn "error" .
// 命令解釋:在當(dāng)前目錄 (.) 及其所有子目錄中遞歸 (-r),查找包含 "error" 的文件,并顯示匹配的行號(hào) (-n)。
解釋:-r 遞歸查找,-n 顯示行號(hào),方便快速定位錯(cuò)誤位置。
2. 結(jié)合 -v 和 -i,排除某些內(nèi)容,并忽略大小寫(xiě)
查找日志中所有包含 "warning" 但不包含 "debug" 的行
grep -i "warning" server.log | grep -v "debug"
解釋:
- -i 讓 "warning" 大小寫(xiě)不敏感匹配(WARNING、Warning 都能匹配)。
- grep -v "debug"把包含 "debug" 的行過(guò)濾掉,只留下我們關(guān)心的 warning 信息。
3. 結(jié)合 -l 和 -r,快速找到含有關(guān)鍵字的文件
在項(xiàng)目目錄中,找出所有包含 "TODO" 關(guān)鍵字的文件
grep -rl "TODO" .
命令解釋:在當(dāng)前目錄 (.) 及其所有子目錄中遞歸 (-r) 搜索包含 "TODO" 的文件,并僅顯示匹配的文件名 (-l),而不顯示具體內(nèi)容。
解釋:
- -r 遞歸查找文件。
- -l 只顯示 文件名,不會(huì)顯示匹配的具體內(nèi)容。
- 適用于 查找代碼里哪些文件包含某個(gè)關(guān)鍵詞,特別方便!
4. 結(jié)合 -A / -B / -C,按上下文查找
- 找出包含 "error" 的日志,并顯示前后 5 行
grep -C 5 "error" server.log
- 找出包含 "error" 的日志,并顯示前 5 行
grep -B 5 "error" server.log
- 找出包含 "error" 的日志,并顯示后 5 行
grep -A 5 "error" server.log
解釋:
- -C 讓 grep顯示匹配行的前后 5 行。
- -B 只顯示 前 5 行(B = Before)。
- -A 只顯示 后 5 行(A = After)。
- 適用于 查找某個(gè)錯(cuò)誤發(fā)生的上下文信息,有助于分析問(wèn)題。
5. 結(jié)合 |(管道符),把 grep 結(jié)果再過(guò)濾
查找日志中所有 "error" 相關(guān)內(nèi)容,但排除 "timeout"
grep "error" server.log | grep -v "timeout"
解釋:
- 先用 grep "error" 找到所有包含 "error" 的行。
- 再用 grep -v "timeout"過(guò)濾掉包含 "timeout" 的行。
- 適用于 日志分析、過(guò)濾關(guān)鍵數(shù)據(jù)。
6. 結(jié)合 -nRI,遞歸查找文本文件并顯示行號(hào)
在項(xiàng)目代碼中查找某個(gè)函數(shù),但忽略二進(jìn)制文件
grep -nRI "init_database" .
解釋:
- -n顯示行號(hào),方便快速定位。
- -R遞歸查找,會(huì)進(jìn)入子目錄搜索所有文件。
- -I忽略二進(jìn)制文件,避免 .o、.so 這些非文本文件干擾搜索結(jié)果。
適用場(chǎng)景:在 C/C++、Python、Shell 項(xiàng)目 里快速查找函數(shù)、變量的定義、以及任何其他關(guān)鍵詞。
7. 結(jié)合 xargs,批量查找多個(gè)關(guān)鍵詞
場(chǎng)景1: 在所有 .c 文件中查找 "error" 或 "warning"
echo -e "error\nwarning" | xargs -I {} grep -rn {} *.c
解釋:
- echo -e "error\nwarning" 生成 兩個(gè)關(guān)鍵詞。
- xargs -I {} : 把關(guān)鍵詞一個(gè)個(gè)傳給 grep 進(jìn)行匹配。
適用場(chǎng)景:當(dāng)你需要 查找多個(gè)關(guān)鍵詞 時(shí),比如找 "error" 和 "warning",但不想寫(xiě)多個(gè) grep 命令。
場(chǎng)景2:刪除所有包含 "DEBUG" 的日志文件
grep -rl "DEBUG" /var/log | xargs rm -f
解釋:
- grep -rl "DEBUG" /var/log 查找 包含 "DEBUG" 的日志文件
- xargs rm -f 把這些文件名傳給 rm 命令,批量刪除
注意:此命令不可逆,建議先用 grep -rl 確認(rèn)文件后再執(zhí)行刪除!
8. 結(jié)合 tail,實(shí)時(shí)監(jiān)控日志中的關(guān)鍵字
實(shí)時(shí)監(jiān)控日志,并只顯示包含 "error" 的行
tail -f /var/log/syslog | grep --color "error"
解釋:
- tail -f持續(xù)輸出最新的日志,不需要每次手動(dòng)運(yùn)行。
- grep --color "error"實(shí)時(shí)匹配 "error",并高亮顯示。
適用場(chǎng)景:
- 服務(wù)器日志實(shí)時(shí)監(jiān)控,及時(shí)發(fā)現(xiàn)錯(cuò)誤。
- 監(jiān)控 Web 服務(wù)器訪問(wèn)日志(如 nginx、apache)。
9. 查找日志中所有 IP 地址(并去重)
從日志文件中提取所有出現(xiàn)過(guò)的 IP 地址,并去重
grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /var/log/syslog | sort | uniq
解釋:
- -o只輸出匹配的部分,不會(huì)打印整行日志,只顯示匹配的 IP 地址。
- -E啟用擴(kuò)展正則,用于匹配 IPv4 地址格式(四段數(shù)字,每段 0-255 之間)。
- sort排序,讓相同的 IP 挨在一起,方便去重。
- uniq去重,讓每個(gè) IP 只出現(xiàn)一次,防止重復(fù)數(shù)據(jù)干擾分析。
適用場(chǎng)景:
- 統(tǒng)計(jì)日志中有哪些訪問(wèn) IP,分析訪問(wèn)來(lái)源。
- 用于網(wǎng)絡(luò)安全、服務(wù)器日志分析,查看可疑 IP。
如果你想 統(tǒng)計(jì)每個(gè) IP 出現(xiàn)的次數(shù),可以這樣做:
grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /var/log/syslog | sort | uniq -c | sort -nr
解釋:
- uniq -c統(tǒng)計(jì)去重后的 IP 出現(xiàn)次數(shù)。
- sort -nr按出現(xiàn)次數(shù)從高到低排序,快速找到最常見(jiàn)的 IP。
適用場(chǎng)景:
- 識(shí)別 訪問(wèn)頻率最高的 IP,防止惡意攻擊(如 DDoS)。
- 監(jiān)控日志,分析服務(wù)器訪問(wèn)情況。
10. 結(jié)合 grep 和 cut,提取某列數(shù)據(jù)
場(chǎng)景1:從 CSV 文件中提取第二列的用戶 ID,并統(tǒng)計(jì)不同 ID 的個(gè)數(shù)
grep "成功" logs.csv | cut -d',' -f2 | sort | uniq -c
解釋:
- grep "成功" :先篩選出包含 "成功" 的行。
- cut -d',' -f2 : 提取 CSV 里用逗號(hào)分隔的第二列(假設(shè)是用戶 ID)。
- sort | uniq -c 統(tǒng)計(jì)不同用戶 ID 的出現(xiàn)次數(shù)。
適用場(chǎng)景:
- 數(shù)據(jù)分析,統(tǒng)計(jì)不同用戶 ID 的成功請(qǐng)求次數(shù)。
- 處理日志文件,提取和篩選有用數(shù)據(jù)。
場(chǎng)景2:提取 Nginx 訪問(wèn)日志的 URL
示例日志(access.log):
192.168.1.1 - - [01/Feb/2024:12:34:56] "GET /index.html HTTP/1.1" 200 512 "-"
192.168.1.2 - - [01/Feb/2024:12:35:00] "GET /about.html HTTP/1.1" 200 432 "-"
192.168.1.3 - - [01/Feb/2024:12:35:10] "GET /contact.html HTTP/1.1" 200 654 "-"
提取所有 GET 請(qǐng)求的 URL:
grep "GET" access.log | cut -d'"' -f2 | cut -d' ' -f2
解釋:
- grep "GET" 過(guò)濾出 HTTP GET 請(qǐng)求
- cut -d'"' -f2 提取 雙引號(hào)內(nèi) 的內(nèi)容
- cut -d' ' -f2 提取 第二個(gè)字段(URL)
輸出:
/index.html
/about.html
/contact.html
統(tǒng)計(jì)訪問(wèn)量最高的 URL:
grep "GET" access.log | cut -d'"' -f2 | cut -d' ' -f2 | sort | uniq -c | sort -nr
示例輸出:
5 /index.html
3 /about.html
2 /contact.html
實(shí)用場(chǎng)景:
- 提取網(wǎng)站訪問(wèn)的 URL
- 統(tǒng)計(jì)訪問(wèn)次數(shù),分析熱門頁(yè)面
簡(jiǎn)潔高效,適用于日志分析!
11. 結(jié)合 grep 和 find,搜索指定類型的文件
在 /path 目錄遞歸查找所有 .log 文件,并在這些文件中搜索 "關(guān)鍵詞",輸出匹配的行。
find /path -type f -name "*.log" -exec grep "關(guān)鍵詞" {} +
逐步拆解
部分 | 作用 |
| 在 |
| 只查找普通文件(排除目錄等其他類型) |
| 只匹配 .log 結(jié)尾的文件(即日志文件) |
| 對(duì)查找到的文件執(zhí)行后續(xù)命令 |
| 在每個(gè)找到的日志文件中搜索 |
| 代表 |
| 批量執(zhí)行 |
例子 1:查找 /var/log/目錄下所有 *.log 文件中包含 ERROR 的行
find /var/log -type f -name "*.log" -exec grep "ERROR" {} +
實(shí)際作用:
- 先在 /var/log 目錄下查找所有 .log 文件
- 然后在這些 .log 文件中搜索 "ERROR"
- 輸出包含 "ERROR" 的 行 + 文件名
示例輸出:
/var/log/system.log:Feb 1 12:30:22 server kernel: ERROR: Disk failure detected
-exec 中 + 和 \; 的區(qū)別
① +(推薦)—— 批量執(zhí)行,提高效率:
find /var/log -type f -name "*.log" -exec grep "ERROR" {} +
find會(huì)盡可能把多個(gè)文件傳遞給 grep,減少命令執(zhí)行次數(shù),提高效率。
等效于:
grep "ERROR" file1.log file2.log file3.log
② \; —— 每個(gè)文件執(zhí)行一次,效率低
find /var/log -type f -name "*.log" -exec grep "ERROR" {} \;
find會(huì)對(duì)每個(gè)*.log文件單獨(dú)執(zhí)行g(shù)rep,效率低下。
等效于:
grep "ERROR" file1.log
grep "ERROR" file2.log
grep "ERROR" file3.log
推薦使用 +,避免對(duì)大量文件執(zhí)行 grep 時(shí)的性能問(wèn)題!
例子 2:查找 *.log 文件中包含"ERROR",但排除 backup.log
find /var/log -type f -name "*.log" ! -name "backup.log" -exec grep "ERROR" {} +
作用:! -name "backup.log" 讓 find排除backup.log,防止誤搜
例子 3:統(tǒng)計(jì) *.log 文件中"ERROR" 關(guān)鍵詞出現(xiàn)的次數(shù)
find /var/log -type f -name "*.log" -exec grep -c "ERROR" {} +
示例輸出:
/var/log/nginx/access.log: 15
/var/log/system.log: 3
grep -c 統(tǒng)計(jì) "ERROR" 出現(xiàn)的次數(shù),適用于日志分析。
12. 結(jié)合 grep 和 head,只顯示最前面的匹配結(jié)果
在日志文件中查找 "error",只顯示最早的 5 行:
grep -i "error" /var/log/syslog | head -5
解釋:
- grep -i "error"找出所有包含 "error" 的行。
- head -5 只顯示前 5 行,避免輸出太多內(nèi)容。
適用場(chǎng)景:只想看看 最早發(fā)生的錯(cuò)誤,不關(guān)心后面的記錄。
13. 結(jié)合 grep 和 diff,對(duì)比兩個(gè)文件的不同之處
對(duì)比 file1.log 和 file2.log,只顯示不同的行:
grep -v -f file1.log file2.log
解釋:
- -f file1.log將 file1.log 里的內(nèi)容作為匹配模板。
- grep -v排除所有在 file1.log 里已經(jīng)存在的行,最終顯示 file2.log 里有但 file1.log 里沒(méi)有的內(nèi)容。
適用場(chǎng)景:比較兩個(gè)日志文件的不同,找出新增的錯(cuò)誤或信息。
14. 結(jié)合 grep 和 wc,統(tǒng)計(jì)不同關(guān)鍵詞的出現(xiàn)次數(shù)
統(tǒng)計(jì)日志中 "error"、"warning"、"failed" 出現(xiàn)的次數(shù)
grep -E "error|warning|failed" /var/log/syslog | wc -l
解釋:
- grep -E "error|warning|failed"匹配多個(gè)關(guān)鍵詞(支持正則表達(dá)式)。
- wc -l統(tǒng)計(jì)匹配到的行數(shù),讓你知道這些關(guān)鍵詞在日志里出現(xiàn)了多少次。
適用場(chǎng)景:統(tǒng)計(jì)關(guān)鍵日志事件的發(fā)生頻率,判斷是否有嚴(yán)重問(wèn)題。
15. 結(jié)合 grep 和 tee,同時(shí)輸出匹配結(jié)果到終端和文件
查找日志中的 "error",并保存到 error.log:
grep -i "error" /var/log/syslog | tee error.log
解釋:
- grep -i "error"查找所有錯(cuò)誤信息。
- tee error.log把結(jié)果同時(shí)輸出到終端和 error.log 文件,方便后續(xù)分析。
適用場(chǎng)景:需要 實(shí)時(shí)查看匹配結(jié)果,同時(shí)保存到文件 以備后續(xù)分析。
16. grep + sort | uniq:統(tǒng)計(jì)匹配內(nèi)容
統(tǒng)計(jì) server.log 中出現(xiàn)的所有錯(cuò)誤類型:
grep "ERROR" server.log | awk '{print $2}' | sort | uniq -c
解釋:
- grep "ERROR" server.log 先找出所有包含 "ERROR" 的行
- awk '{print $2}' 提取 第二列(假設(shè)錯(cuò)誤類型在第二列)
- sort 排序
- uniq -c 統(tǒng)計(jì)每種錯(cuò)誤類型出現(xiàn)的次數(shù)
實(shí)用場(chǎng)景:統(tǒng)計(jì)日志中各種錯(cuò)誤的發(fā)生頻率,快速定位高頻錯(cuò)誤。
17. 結(jié)合 sed,批量替換文本
批量替換日志中的 "error" 為 "ERROR"
grep -l "error" *.log | xargs sed -i 's/error/ERROR/g'
解釋:
- grep -l "error" *.log : 找到所有包含 "error" 的日志文件。
- xargs sed -i 's/error/ERROR/g' : 逐個(gè)修改這些文件,將 "error" 變成 "ERROR"。
適用場(chǎng)景:批量修改 文件中的內(nèi)容,避免手動(dòng)修改多個(gè)文件。
18. 結(jié)合 awk,提取關(guān)鍵信息
從 access.log 里提取訪問(wèn) IP
grep "200" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
解釋:
- grep "200" : 篩選返回狀態(tài)碼 200(成功訪問(wèn)) 的日志。
- awk '{print $1}' : 提取日志中的第 1 列(通常是 IP 地址)。
- sort | uniq -c : 統(tǒng)計(jì)每個(gè) IP 訪問(wèn)次數(shù)。
- sort -nr : 按訪問(wèn)次數(shù)從高到低排序。
適用場(chǎng)景:
- 分析 網(wǎng)站訪問(wèn)來(lái)源,識(shí)別熱門 IP。
- 識(shí)別惡意爬蟲(chóng),發(fā)現(xiàn)異常高頻 IP。
19. grep + ps:查找正在運(yùn)行的進(jìn)程
檢查系統(tǒng)中是否有 nginx 進(jìn)程運(yùn)行
ps aux | grep "nginx"
解釋:
- ps aux 列出所有運(yùn)行的進(jìn)程
- grep "nginx" 過(guò)濾出包含 "nginx" 的進(jìn)程
更精確的用法(排除 grep 自己):
ps aux | grep nginx | grep -v grep
或
ps aux | grep "[n]ginx"
這里的 [n]ginx 是一個(gè)小技巧,避免 grep 命令本身出現(xiàn)在結(jié)果中。
20. grep + netstat / ss:查看端口占用
查找正在使用 8080 端口的進(jìn)程
netstat -tulnp | grep "8080"
解釋:
- netstat -tulnp 顯示所有監(jiān)聽(tīng)的端口
- grep "8080" 過(guò)濾出使用 8080 端口的進(jìn)程
如果 netstat 不可用,可以用 ss 代替:
ss -tulnp | grep "8080"
實(shí)用場(chǎng)景:排查端口占用問(wèn)題,確認(rèn)某個(gè)端口是否被某個(gè)進(jìn)程占用。
四、總結(jié):學(xué)會(huì) grep,你的查找效率起飛!
grep 是一個(gè)超級(jí)實(shí)用的工具,掌握以下幾個(gè)最常用的參數(shù),你的查找效率絕對(duì)提升 10 倍。
常用語(yǔ)法:
- grep "關(guān)鍵詞" 文件 —— 查找文件中的內(nèi)容
- grep -i "關(guān)鍵詞" 文件 —— 忽略大小寫(xiě)
- grep -r "關(guān)鍵詞" 目錄 —— 遞歸查找文件夾中的內(nèi)容
- grep -n "關(guān)鍵詞" 文件 —— 顯示匹配的行號(hào)
- grep -v "關(guān)鍵詞" 文件 —— 反向查找,不包含關(guān)鍵詞的行
- grep -C 3 "關(guān)鍵詞" 文件 —— 顯示前后 3 行內(nèi)容
- grep --color "關(guān)鍵詞" 文件 —— 高亮顯示匹配的內(nèi)容
進(jìn)階用法:組合 grep 選項(xiàng),讓查找更高效!
- grep -rn "關(guān)鍵詞" . —— 遞歸查找文件,并顯示行號(hào)
- grep -ri "關(guān)鍵詞" . —— 遞歸查找,并忽略大小寫(xiě)
- grep -rl "關(guān)鍵詞" . —— 遞歸查找,只顯示匹配的文件名
- grep -A 3 "關(guān)鍵詞" 文件 —— 顯示匹配行及 后 3 行
- grep -B 5 "關(guān)鍵詞" 文件 —— 顯示匹配行及 前 5 行
- grep -C 2 "關(guān)鍵詞" 文件 —— 顯示匹配行的 前后 2 行
- grep -c "關(guān)鍵詞" 文件 —— 統(tǒng)計(jì) 匹配行的數(shù)量
- grep -o "關(guān)鍵詞" 文件 —— 只顯示匹配的 關(guān)鍵詞,不輸出整行
- grep -m 5 "關(guān)鍵詞" 文件 —— 限制 輸出最多 5 行匹配內(nèi)容
- grep -w "關(guān)鍵詞" 文件 —— 精確匹配完整單詞,不匹配部分字符
- grep -F "關(guān)鍵詞" 文件 —— 純文本匹配,不使用正則表達(dá)式
- grep "關(guān)鍵詞" 文件 | grep "其他關(guān)鍵詞" —— 多次過(guò)濾,篩選更精準(zhǔn)
- grep "關(guān)鍵詞" 文件 | sort | uniq -c | sort -nr —— 統(tǒng)計(jì)關(guān)鍵詞出現(xiàn)次數(shù)
- grep -r "關(guān)鍵詞" /path | xargs grep "其他關(guān)鍵詞" —— 批量搜索多個(gè)關(guān)鍵詞
- grep "關(guān)鍵詞" 文件 | tee output.log —— 同時(shí)輸出到終端和文件
- grep "關(guān)鍵詞" 文件 | cut -d' ' -f2 —— 提取特定字段(如 URL)
- find /path -type f -name "*.log" -exec grep "關(guān)鍵詞" {} + —— 按文件類型搜索
- ps aux | grep "nginx" —— 查找 正在運(yùn)行的進(jìn)程
- netstat -tulnp | grep "8080" —— 查找 被占用的端口
- tail -f 文件 | grep "關(guān)鍵詞" —— 實(shí)時(shí)監(jiān)控日志,過(guò)濾關(guān)鍵內(nèi)容
- diff <(grep "關(guān)鍵詞" 文件1) <(grep "關(guān)鍵詞" 文件2) —— 對(duì)比兩個(gè)文件的匹配差異
下一步,掌握 sed 和 awk,玩轉(zhuǎn)文本處理!
grep 適合查找文本,而在 Linux 世界里,修改和格式化文本 還需要兩個(gè)更強(qiáng)大的工具:sed 和 awk。
- sed:強(qiáng)大的 文本編輯器,可以 批量替換、刪除、修改 內(nèi)容。
- awk:強(qiáng)大的 文本處理工具,適用于 數(shù)據(jù)提取、格式化、統(tǒng)計(jì)。