负面展望未来

时间:2014-09-07 18:26:05

标签: regex grep

我想在foo后面没有bar时匹配一行,例如

foo bar< - 不匹配

foo 123< - 匹配

我使用以下正则表达式

echo 'foo bar'  | grep -P 'foo.*(?!bar)'

上面的正则表达式不应该匹配,但它实际上是匹配的。

任何原因?

2 个答案:

答案 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

如果foobar

之间的距离更远
awk '/foo/ && !/foo.*bar/' file