Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux grep 指令完全指南:正則表達式、常用參數與實戰範例

編輯:Linux 系統常見問題解答

grep 簡介

grep (Global Regular Expression Print) 是 Linux 核心文字搜尋工具,支援正則表達式,能快速從檔案或標準輸入中過濾符合模式的行。

基本語法

grep [選項] 模式 [檔案...]
grep [選項] -e 模式1 -e 模式2 [檔案...]

核心參數分類

輸出控制

參數功能
-c, --count僅輸出匹配行數
-n, --line-number顯示行號
-h, --no-filename多檔搜尋時不顯示檔名
-l, --files-with-matches僅列出含匹配行的檔名
-o, --only-matching僅輸出匹配的部分 (非整行)
-v, --invert-match反向匹配 (顯示不符合的行)
-s, --no-messages抑制錯誤訊息 (如檔案不存在)
--color=auto高亮顯示匹配部分 (預設終端機自動)

模式匹配控制

參數功能
-i, --ignore-case忽略大小寫
-w, --word-regexp整字匹配
-x, --line-regexp整行匹配
-E, --extended-regexp使用擴展正則 (ERE),等同 egrep
-P, --perl-regexp使用 Perl 相容正則 (PCRE),功能最強
-F, --fixed-strings字面字串匹配 (不解析正則),等同 fgrep

上下文控制

參數功能
-A NUM, --after-context顯示匹配行後 NUM 行
-B NUM, --before-context顯示匹配行前 NUM 行
-C NUM, --context顯示匹配行前後各 NUM 行

正則表達式速查 (ERE/PCRE 常用)

元字元說明範例
.任意單一字元c.t 匹配 cat, cut, c3t
^行首^root 以 root 開頭的行
$行尾bash$ 以 bash 結尾的行
[abc]字元集合 (任一)[aeiou] 任一母音
[^abc]排除字元集合[^0-9] 非數字
[a-z]字元範圍[A-Za-z] 英文字母
*前一元素 0 次或多次ab*c ac, abc, abbc...
+前一元素 1 次或多次 (ERE/PCRE)ab+c abc, abbc...
?前一元素 0 次或 1 次 (ERE/PCRE)ab?c ac, abc
{n}前一元素恰好 n 次o{2} oo
{n,}前一元素至少 n 次
{n,m}前一元素 n 到 m 次
\|或 (ERE 需轉義,PCRE 可用 |)cat\|dog
()分組 (ERE 需轉義)(ab)+ ababab
\b單字邊界 (PCRE)\bcat\b 整字 cat
\d \w \s數字/單字字元/空白 (PCRE)\d{3}-\d{4} 電話格式

實戰範例集

基礎搜尋

# 1. 搜尋含 "error" 的行 (含行號)
grep -n "error" app.log

# 2. 忽略大小寫
grep -ni "error" app.log

# 3. 反向匹配:排除含 "debug" 的行
grep -v "debug" app.log

# 4. 統計匹配行數
grep -c "ERROR" app.log

正則進階

# 5. 行首匹配:以 timestamp 開頭
grep "^2023-" syslog

# 6. 字元集合:找 t[a-c]b 模式
grep "t[abc]b" file.txt

# 7. 排除字元:oo 前非 g
grep "[^g]oo" file.txt

# 8. 範圍:含字母數字的行
grep "[a-zA-Z0-9]" file.txt

# 9. 空行 / 非空行
grep "^$" file.txt       # 空行
grep -v "^$" file.txt    # 非空行

# 10. 重複字元:連續兩個 o
grep -E "o{2}" file.txt  # 或 grep "oo"

# 11. 整字匹配
grep -w "root" /etc/passwd

多檔與遞迴

# 12. 遞迴搜尋目錄
grep -r "pattern" /etc/

# 13. 僅搜尋 .conf 檔
grep -r "pattern" /etc/ --include="*.conf"

# 14. 排除目錄
grep -r "pattern" /var/log --exclude-dir="journal"

# 15. 只顯示檔名
grep -rl "TODO" src/

上下文與管線應用

# 16. 顯示匹配行前後 3 行
grep -C 3 "critical" app.log

# 17. 結合管線:找出含 error 的程序 PID
ps aux | grep -E "error|fail" | grep -v grep

# 18. 計算某 IP 存取次數 (nginx log)
grep -c "192.168.1.100" access.log

# 19. 只輸出匹配的 IP 部分 (PCRE)
grep -oP '\d{1,3}(\.\d{1,3}){3}' access.log | sort -u

效能提示

  • 大檔案用 -F (固定字串) 比正則快數倍
  • 避免在極大檔案上使用 -P (PCRE),記憶體佔用高
  • grep -r 遞迴時配合 --include/--exclude-dir 縮小範圍
  • 固定字串多模式用 fgrep -f patterns.txt 讀取模式檔

相關工具

  • egrep = grep -E (ERE)
  • fgrep = grep -F (固定字串)
  • zgrep:直接搜尋 .gz 壓縮檔
  • ack/rg (ripgrep):程式碼搜尋優化工具,預設忽略 .git、二進制檔
Copyright © Windows教程網 All Rights Reserved