正则表达式语法与实战速查

常用写法

grep -E '^error' app.log
grep -E 'error|warn' app.log
grep -E '^[0-9]{4}-[0-9]{2}-[0-9]{2}' app.log
grep -E 'user_[a-z0-9]+' app.log
grep -E 'colou?r' app.log
grep -E '^[^#]' config.conf
grep -P '\b\d{1,3}(\.\d{1,3}){3}\b' app.log
grep -P '(?<=user=)[^&]+' access.log
grep -P '^(?!.*healthz).*$' access.log
grep -oE '[0-9]+ms' app.log | sort -n
sed -E 's/[[:space:]]+/ /g' file
sed -E 's/^([^:]+):.*/\1/' file
awk '/^ERROR/ {print $0}' app.log

场景速查

目的 写法/命令 注意
行首/行尾 ^ / $ 多行文本需显式启用多行模式
任意字符 . 默认不匹配换行
字符类 [a-z0-9_] - 放首尾才是字面量
排除字符 [^abc] 方括号内取反
量词 * + ? {m,n} 默认贪婪匹配
非贪婪 *? +? 主要见于 PCRE
分组捕获 (...) / \1 sed -E 用 \1 引用
非捕获分组 (?:...) 只分组不捕获
或 a|b 用括号限定作用范围
单词边界 \b GNU 工具支持,POSIX 未定义
前瞻 (?=...) / (?!...) 需要 PCRE(grep -P)
后顾 (?<=...) / (?<!...) 后顾长度通常要求固定
忽略大小写 grep -i / (?i) 不要硬编码两种大小写

易错点

相关命令

读完自测

  1. * 与 + 的区别是什么?
  2. 贪婪与非贪婪如何选择?
  3. grep -E 与 grep -P 有什么区别?
答案
  1. * 匹配 0 次或多次,+ 匹配 1 次或多次。
  2. 默认贪婪;在量词后加 ? 改为非贪婪,PCRE 支持。
  3. -E 使用 POSIX ERE,-P 使用 PCRE,支持 \d、前瞻和后顾等。