萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux grep 命令完全指南:正則表達式、上下文輸出、多文件搜索、腳本返回值應用

grep(Global Regular Expression Print)是 Linux 文本搜索的瑞士軍刀,支援基本/擴展/固定正則,可作為管道過濾器、腳本條件判斷、代碼審計利器。本文系統整理參數、正則語法、POSIX 字符類、5 大實戰場景、返回值在腳本中的應用。

一、命令格式與核心參數


grep [選項] 模式 [文件...]

二、正則表達式語法速查

參數說明
-E, --extended-regexp使用擴展正則(等同 egrep)
-F, --fixed-strings字面字符串匹配(等同 fgrep,最快)
-i, --ignore-case忽略大小寫
-v, --invert-match反向匹配(顯示不匹配行)
-n, --line-number顯示行號
-c, --count統計匹配行數
-l, --files-with-matches僅列出匹配的文件名
-L, --files-without-match列出不匹配的文件名
-r, -R, --recursive遞歸搜索目錄
-A N顯示匹配行及其後 N 行
-B N顯示匹配行及其前 N 行
-C N顯示匹配行前後各 N 行
-o, --only-matching只輸出匹配部分(每行一個)
-w, --word-regexp全詞匹配
-x, --line-regexp全行匹配
-f 文件從文件讀取模式(每行一個)
-z, --null-data以 \0 分隔行(配合 xargs -0)
-q, --quiet靜默模式,僅通過返回值判斷
元字符含義範例
^行首^root 以 root 開頭
$行尾bash$ 以 bash 結尾
.任意單字符gr.p 匹配 grep、grip
*前字符 0 次或多次ab*c 匹配 ac、abc、abbc
.*任意長度任意字符^.*error
[]字符集合[Gg]rep
[^]排除字符集[^0-9] 非數字
\()捕獲組\(ab\)\1 匹配 abab
\< \>單詞邊界\
\{m,n\}重複 m~n 次0\{3,5\} 3-5 個 0
\w \W單詞/非單詞字符\w+
\b單詞邊界(同 \< \>)\bgrep\b

三、POSIX 字符類(需在 [] 內使用)

  • [:alnum:] 字母數字、[:alpha:] 字母、[:digit:] 數字
  • [:space:] 空白、[:lower:] 小寫、[:upper:] 大寫
  • [:punct:] 標點、[:cntrl:] 控制字符、[:xdigit:] 十六進制
  • 用法:grep '[[:digit:]]\{3\}' file 匹配 3 位數字

四、五大實戰場景

1. 進程查找(配合 ps)


ps -ef | grep sshd
# root  1234  1  0  Jan01 ?  00:00:00 /usr/sbin/sshd -D
# root  5678 1234  0  10:00 ?  00:00:00 sshd: user@pts/0
# user  9999 8888  0  10:05 pts/1  00:00:00 grep sshd   ← grep 自身

技巧:ps -ef | grep [s]shd 避免匹配 grep 自身

2. 統計匹配行數


grep -c "ERROR" app.log
# 42

3. 從文件讀取多關鍵字搜索


grep -f keywords.txt target.log
# keywords.txt 每行一個模式

4. 遞歸搜索代碼(程序員必備)


grep -rn "TODO" src/
# src/main.c:10: // TODO: fix bug
# src/util.h:5:  #define TODO(x)

5. 結合 xargs 批量處理


grep -rl "deprecated" src/ | xargs -r sed -i 's/deprecated/legacy/g'
# 將所有包含 deprecated 的文件中替換為 legacy

五、返回值在腳本中的應用


if grep -q "success" result.log; then
    echo "測試通過"
else
    echo "測試失敗"
fi

# 返回值:0=匹配到,1=未匹配,2=文件錯誤/語法錯誤

grep 正則搜索示意圖

copyright © 萬盛學電腦網 all rights reserved