Linux grep正则表达式学习笔记
发布日期:2025-04-06 01:18:44 浏览次数:7 分类:精选文章

本文共 1677 字,大约阅读时间需要 5 分钟。

基础参数

grep命令支持多种参数和选项,用于控制匹配行为。以下是常见的命令行参数及其作用:

  • -a:将二进制文件以文本形式处理。
  • -c:显示匹配行的数量。
  • -i:忽略大小写差异,执行无区分匹配。
  • -n:在匹配项的开头显示匹配行号。
  • -o:只显示匹配的字符部分,不显示完整的行。
  • -A:显示匹配项后面跟随的N行内容。
  • -B:显示匹配项前面带着的N行内容。
  • -E:启用扩展正则表达式(PCRE),进行更复杂的模式匹配。
  • --color:将匹配结果以特定颜色高亮显示。

字符类匹配

grep支持多种预定义字符集合,可以用于快速定位特定字符类型。常见的字符类包括:

  • [:alnum:]:匹配字母和数字字符。
  • [:alpha:]:匹配字母字符(大小写)。
  • [:digit:]:匹配数字字符。
  • [:lower:]:匹配小写字母。
  • [:space:]:匹配空白字符,包括空格和制表符。
  • [:upper:]:匹配大写字母。
  • [:wn:]:匹配字母和数字字符,也可以用于匹配合并、停用词列表。

例如,可以通过以下命令匹配包含“v”或“V”的文件:

grep '[vV]ivek' 文件名

如果需要匹配带有数字的“vivek”,可以使用:

grep -w '[vV]ivek[0-9]' 文件名

正则表达式限定符

正则表达式通过限定符(如+*?等)控制匹配次数。常见限定符包括:

  • .(任意单个字符,不包括换行符)。
  • *(零次或多次重复)。
  • +(至少一次重复)。
  • ?(零次或一次重复)。

例如,可以匹配“vivek”重复两次的文本:

egrep "vivek{2}" 文件名

正则序列检测符

grep支持通过序列检测符(如{n,m})限定子表达式的出现次数。例如,匹配包含三个“c”字符的文本:

egrep 'c{3}' 文件名

或逻辑与和逻辑

  • 或逻辑(|):可以使用 -E开启扩展正则表达式模式,或者直接在表达式中使用|符号。例如,匹配“word1”或“word2”:
grep -E 'word1|word2' 文件名
  • 或逻辑,对于普通grep命令,使用以下命令组合:
grep 'word1' 文件名 | grep 'word2' 文件名

正则特殊字符

正则表达式中某些字符需要通过转义符(如\)进行处理,以避免特殊含义。常见字符包括:

  • ^$?*+{}|等。

例如,^匹配字符串开始位置,而\^匹配实际的“^”字符。

正则非打印字符

某些字符不属于打印字符(如制表符、换行符等),在正则表达式中可以通过转义符表示。常见非打印字符包括:

  • \n:换行符。
  • \r:回车符。
  • \t:制表符。
  • \s:所有空白字符。
  • \S:所有非空白字符。

零宽断言

零宽断言用于在特定位置添加限定条件,而不匹配字符本身。常见零宽断言包括:

  • \b:单词边界,匹配词的开头或结尾。
  • (?<=...):正向零宽断言,匹配后面跟随指定内容。
  • (?<!...):负向零宽断言,匹配前面不带有指定内容。
  • (?=...):正向零宽断言,匹配后面带有指定内容。

例如,匹配以“re”开头的单词:

grep '(?<=re)\w+' 文件名

常用分组

正则表达式中的分组用于保存匹配结果或进行逻辑组合。常见分组类型包括:

  • ( ):捕获或非捕获分组。
  • (?<name>...):命名捕获组。
  • (?...):属于非捕获分组。

例如,可以提取“手机号”区域码和 remaining 数字:

grep '\d{3,}\s\d+' 文件名

正则表达式模式说明

grep支持Basic Regular Expression(BREs)、Extended Regular Expression(EREs)和 Perl Compatible Regular Expression(PCREs)。

  • BREs:默认模式,部分支持字符类和基本限定符。
  • EREs:支持更多高级功能,如多线匹配、扩展限定符。
  • PCREs:支持更多高级功能,如自动回溯、动态语言支持。

通过选择不同的模式,可以更灵活地处理复杂文本匹配任务。

上一篇:Linux HA Cluster-Corosync+Pacemaker
下一篇:linux grep命令详解

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年05月13日 01时47分10秒