我想在foo
后面没有bar
时匹配一行,例如
foo bar
< - 不匹配
foo 123
< - 匹配
我使用以下正则表达式
echo 'foo bar' | grep -P 'foo.*(?!bar)'
上面的正则表达式不应该匹配,但它实际上是匹配的。
任何原因?
答案 0 :(得分:3)
按如下方式更改正则表达式:
'foo(?!.*bar).*'
输出:
$ echo 'foo bar' | grep -P 'foo(?!.*bar).*'
$ echo 'foo 123' | grep -P 'foo(?!.*bar).*'
foo 123
答案 1 :(得分:0)
为什么要制作复杂的正则表达式,请使用awk
awk '/foo/ && !/foo bar/' file
如果foo
和bar
awk '/foo/ && !/foo.*bar/' file