在 grep 的正则表达式模式中使用 OR

在 grep 的正则表达式模式中使用 OR

我在 grep 中使用以下模式进行正则表达式匹配(zgrep,在压缩文件中搜索):

zgrep -P '(?<=start).{20,120}(?=end)' *

我需要OR在中间添加一些带有运算符的术语,但这种模式不起作用

zgrep -P '(?<=start)[first|second|third].{20,120}(?=end)' *

如何first|second|third在匹配字符串的中间引入?

答案1

括号中的表达式[..]匹配列表中的任何单个字符,因此[first|second|third]分别匹配每个字母:f, i, r, s, t, |,e等(注意不需要第二个s)。该规则很少有例外,例如^开头是否定或-标记字符范围,但管道|并不特殊,因此grep只需在文件中搜索此符号即可。

你想要的是(first|second|third)。里面的所有内容(..)形成主正则表达式的子表达式,并且可以与其组合/连接,|被解释为 OR 运算符。

相关内容