我在 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 运算符。