我想匹配一条没有后跟bar的行,例如
foo 123 <-- match
foo bar <-- not match
使用以下正则表达式不起作用:
echo "foo 123" | grep -E 'foo.*(?!bar).*'
有什么想法吗?
答案 0 :(得分:4)
在没有OSX grep -P
的系统上,您可以使用此awk
命令:
awk -F 'foo' 'NF>1{s=$0; $1=""; if (!index($0,"bar")) print s}' file
<强> Script Demo 强>
答案 1 :(得分:2)
你可以尝试下面的grep命令,该命令使用-P
(perl-regexp)参数,
grep -P 'foo(?:(?!bar).)*$' file
示例:强>
$ cat file
foo 123
foo bar
$ grep -P 'foo(?:(?!bar).)*$' file
foo 123
或
仅使用否定前瞻来检查字符串bar
是否在foo
之后,而不匹配任何后续字符。
$ grep -P 'foo(?!.*bar)' file
foo 123
答案 2 :(得分:0)
您可以使用-v
来反转匹配:
grep -v 'foo.*bar' file