GNU grep 命令在 Linux 系统中默认支持扩展正则表达式(ERE),其核心功能是通过模式匹配定位文本内容。以下是正则表达式在 grep 中的关键应用场景及示例:
基础匹配与大小写控制
基础匹配通过直接输入字符串实现,例如 grep vivek /etc/passwd 会匹配包含 "vivek" 的行。若需忽略大小写,添加 -i 选项:grep -i vivek /etc/passwd。匹配完整单词时,使用 -w 选项(如 grep -w vivek 避免匹配 "vivekgite")。
锚点定位
^ 和 $ 分别匹配行首和行尾。例如:
- grep ^vivek 匹配以 "vivek" 开头的行;
- grep 'foo$' 匹配以 "foo" 结尾的行;
- grep '^foo$' 仅匹配仅含 "foo" 的行;
- grep '^$' 匹配空行。
字符类与范围匹配
字符类用方括号 [] 定义,匹配其中任意字符。例如:
- grep '[vV]ivek' 匹配 "Vivek" 或 "vivek";
- grep '[0-9]' 匹配含数字的行;
- grep '[A-Za-z]' 匹配含字母的行。
预定义字符类(如 [:digit:]、[:upper:])可简化操作,例如 grep '[[:upper:]]' 匹配所有大写字母。
通配符与重复匹配
. 匹配任意单个字符,例如 grep 'b.t' 匹配 "bat"、"bit" 等。
重复限定符控制匹配次数:
- * 匹配前一项零次或多次(如 grep 'co*l' 匹配 "cl"、"cool");
- + 匹配一次或多次(如 grep 'co+l' 排除 "cl");
- {N} 精确匹配 N 次(如 grep 'v{2}' 匹配 "vv");
- {N,M} 匹配 N 到 M 次(如 grep 'c{3,}' 匹配至少三个 "c")。
逻辑操作与分组
- 或匹配:使用 |(需 -E 选项或 egrep),例如 grep -E 'vivek|raj' 匹配两者之一;
- 与匹配:通过管道组合多个 grep,例如 grep 'word1' file | grep 'word2' 匹配同时含两者的行;
- 分组:用 () 分组(需转义,如 grep 'co{1,2}l' 匹配 "col" 或 "cool")。
特殊场景处理
- 以 - 开头的模式:需用 -e 选项(如 grep -e '--test--');
- 高亮显示:添加 --color 选项(如 grep --color 'error');
- 仅显示匹配内容:使用 -o 选项(如 grep -o '[0-9]+' 提取数字)。
扩展正则表达式(ERE)与基础模式(BRE)
GNU grep 默认使用 BRE,部分元字符(如 +、|)需转义(如 +)。-E 选项或 egrep 启用 ERE,直接解析元字符(如 grep -E 'vivek|raj')。POSIX 标准建议避免在可移植脚本中使用 {,优先用 [}] 匹配字面字符。
通过灵活组合这些规则,可高效完成复杂文本搜索任务。