grep 是文本處理利器,掌握其正則表達式、上下文控制、反向匹配、遞歸搜索等高級用法,能將日誌分析、代碼搜索效率提升數倍。本文從面試題切入,通過大量實例演示 grep 核心技巧。
# 三種等效寫法 grep CPU: /var/run/dmesg.boot cat /var/run/dmesg.boot | grep CPU: < /var/run/dmesg.boot grep CPU:
grep WARNING /var/run/dmesg.boot -c # 內建計數 grep WARNING /var/run/dmesg.boot | wc -l # 管道組合
| 選項 | 功能 | 示例 |
|---|---|---|
| -w | 整詞匹配 | grep -w 'seven' file |
| -C n | 顯示匹配行前後 n 行 | grep -C 1 'keyword' file |
| -A n / -B n | 僅顯示後 n 行 / 前 n 行 | grep -A 2 'error' log |
| -v | 反向匹配(排除) | grep -v '^#' config |
| -E | 擴展正則(支持 + ? {} () |) | grep -E 'twenty[1-4]' file |
| -o | 僅輸出匹配部分 | grep -oE '\b\d{1,3}(\.\d{1,3}){3}\b' file |
| -r | 遞歸搜索目錄 | grep -rni 'allow' /usr/src/sys/dev/ |
| -i | 忽略大小寫 | |
| -n | 顯示行號 |
\<word(詞首),word\>(詞尾)^pattern(行首),pattern$(行尾)[[:upper:]]、[[:digit:]]、[[:space:]] 等 POSIX 標準類grep -E '(six|seven|eight).*\1' file(匹配重複詞)grep -E 'sock|ITEM' file 或 grep -E '(sock|ITEM)' filegrep -v '#' /etc/resolv.conf | grep -oE '\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b'ps -afx | grep '[t]tyv' # 技巧:字符類讓自身不匹配
Ctrl+V 後按 Tab → grep " 504 " fileGREP_COLORS 或使用 --color=autogrep -rni allow /usr/src/sys/dev/ | grep unsupp # 快速定位 Intel 非標準 SFP 支持代碼