Linux 中的 grep
用法詳解
grep
是 Linux 中強大的文本搜索工具,用于在文件或輸入流中查找匹配指定模式的行。其基本語法為:
grep [選項] "模式" [文件]
核心功能
基礎搜索
在文件中查找包含特定字符串的行:grep "error" log.txt # 搜索 log.txt 中所有含 "error" 的行
正則表達式搜索
支持正則表達式匹配(需用-E
或egrep
):grep -E "404|500" access.log # 查找 HTTP 狀態碼為 404 或 500 的行
常用選項
選項 | 作用 | 示例 |
---|---|---|
-i | 忽略大小寫 | grep -i "warning" system.log |
-v | 反向匹配(排除模式) | grep -v "success" result.csv |
-r | 遞歸目錄搜索 | grep -r "function" /src/code/ |
-n | 顯示行號 | grep -n "TODO" main.py |
-c | 統計匹配行數 | grep -c "login" auth.log |
-w | 全詞匹配 | grep -w "port" config.ini |
-A | 顯示匹配行后 N 行 | grep -A 2 "crash" debug.log |
-B | 顯示匹配行前 N 行 | grep -B 1 "timeout" trace.out |
實用技巧
管道組合
與其他命令配合使用:ps aux | grep "nginx" # 查找 Nginx 進程 cat data.json | grep "id" # 從 JSON 中提取含 "id" 的行
多文件搜索
支持同時搜索多個文件:grep "deprecated" *.js # 在所有 JS 文件中查找
正則進階
使用特殊符號:grep "^2023" dates.log # 查找以 2023 開頭的行 grep "end$" script.sh # 查找以 "end" 結尾的行
注意:
- 特殊字符(如
$
,*
,[
)需用單引號包裹:grep '\$PATH' .bashrc
- 復雜正則建議用
egrep
或grep -E
典型場景
# 在日志中查找錯誤并顯示前后 3 行
grep -C 3 "segmentation fault" /var/log/syslog# 統計代碼中特定函數調用次數
grep -r -c "calculate(" /project/src/# 過濾注釋行(排除以 # 開頭的行)
grep -v "^#" config.conf