之前使用模式“匹配且不匹配”的grep行

时间:2014-06-03 20:50:35

标签: awk grep

在test.txt文件中包含以下内容:

line 1  
foo bar  
line 2  
foo  

我需要在包含foo但不包含bar的行之前返回该行

在示例中,结果必须是:

line 2  
foo

3 个答案:

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