在test.txt文件中包含以下内容:
line 1
foo bar
line 2
foo
我需要在包含foo但不包含bar的行之前返回该行
在示例中,结果必须是:
line 2
foo
答案 0 :(得分:2)
grep -v bar fyle.txt | grep -B 1 foo
在foo之前得到一行,但没有用bar
答案 1 :(得分:1)
使用awk
,将正则表达式匹配与逻辑运算符结合起来非常容易:
$ awk '/foo/ && !/bar/{printf "%s\n%s\n",last,$0}{last=$0}' file
line 2
foo
答案 2 :(得分:0)
您可以使用"否定前瞻"表达式(需要使用grep的命令行参数-P
启用perl正则表达式)
grep -P -B1 '(foo)(?!.*bar.*)' data.txt