Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Shell 正則表達式實用範例速查:grep/sed/awk 常用模式與元字元完整對照表

編輯:Linux 教學

正則表達式是 Linux 文字處理的核心技能。本文針對 Shell 腳本常見場景 (grep 過濾、sed 替換、awk 擷取),整理 40+ 實用模式:行首行尾錨定、字元類別、量詞、分組捕獲、轉義特殊字元、IP/日期/郵件格式驗證,並對照 BRE (基本) 與 ERE (延伸) 差異,附贈 grep -E、sed -r、awk 實戰指令範例,可直接複製套用。

一、元字元與語法速查表

元字元意義BRE/ERE範例匹配
^行首通用^root 以 root 開頭的行
$行尾通用bash$ 以 bash 結尾的行
.任意單一字元通用a.c 匹配 abc, axc
[abc]字元類別 (任一)通用[Ss]ignal Signal 或 signal
[^abc]排除字元類別通用[^0-9] 非數字
[a-z]範圍通用[a-zA-Z] 英文字母
*前一元素 0 次或多次通用ab*c ac, abc, abbc...
\+前一元素 1 次或多次ERE / BRE 需轉義ab\+c abc, abbc...
\?前一元素 0 次或 1 次ERE / BRE 需轉義ab\?c ac, abc
\{m,n\}前一元素 m~n 次BRE[0-9]\{3\} 三位數字
{m,n}同上ERE[0-9]{3} 三位數字
\(\)分組捕獲BRE\(abc\)\1 abcabc
()分組捕獲ERE(abc)\1 abcabc
\|或BREcat\|dog cat 或 dog
|或EREcat|dog

二、常用實戰模式庫 (可直接用於 grep -E / sed -r / awk)

1. 行首行尾與空行

^$              # 空行
^[[:space:]]*$  # 空白行 (含空格/Tab)
^#              # 註解行
^[^#]           # 非註解行

2. IP 地址 (IPv4)


# 簡易版 (不驗證 0-255)
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

# 嚴格版 (0-255)
((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])

3. 日期格式


# YYYY-MM-DD
[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])

# DD/MM/YYYY
(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}

4. 電子郵件 (簡易版)


[[:alnum:]._%+-]+@[[:alnum:].-]+\.[[:alpha:]]{2,}

5. URL (HTTP/HTTPS)


https?://[[:alnum:]._-]+(:[0-9]+)?(/.*)?

6. MAC 地址


([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}

7. 特定埠連線數 (netstat/ss 輸出)


:80\s+.*ESTABLISHED
:443\s+.*ESTABLISHED

三、工具實戰範例

grep -E (延伸正則,推薦日常使用)


# 搜尋包含 IP 的行
grep -E '[0-9]{1,3}(\.[0-9]{1,3}){3}' access.log

# 搜尋非註解且非空行
grep -E -v '^#|^$' config.conf

# 顯示行號與匹配色彩
grep -En --color 'error|fail' /var/log/messages

sed -r (延伸正則,捕獲群組用 \1 \2)


# 將 YYYY-MM-DD 轉為 DD/MM/YYYY
sed -r 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/' dates.txt

# 刪除行首空白
sed -r 's/^[[:space:]]+//' file.txt

# 在匹配行尾插入文字
sed -r '/ERROR/ s/$/ [ALERT]/' app.log

awk (內建 ERE,支援 ~ / !~ 匹配)


# 印出第 1 欄為 IP 格式的行
awk '$1 ~ /^[0-9]{1,3}(\.[0-9]{1,3}){3}$/' access.log

# 提取郵件域名
awk -F@ '/@/ {print $2}' maillist.txt | sort -u

四、BRE vs ERE 關鍵差異提醒

  • grep 預設 BRE,加 -E 或用 egrep 切換 ERE
  • sed 預設 BRE,加 -r (GNU) 或 -E (BSD/macOS) 切換 ERE
  • awk 內建 ERE,無需切換
  • BRE 中 + ? {} () | 需轉義 \+ \? \{\} \(\) \|
  • ERE 中上述字元為元字元,若要匹配字面值需轉義 \+ \? 等

五、除錯技巧


# 顯示正則匹配過程 (GNU grep)
grep -E --debug-pattern 'pattern' file

# 線上測試工具
# https://regex101.com/ (支援 PCRE, Golang, JavaScript, Python)
# https://regexr.com/
Copyright © Windows教程網 All Rights Reserved