【发布时间】:2017-07-28 17:38:11
【问题描述】:
文件test.txt中有如下内容:
line 1
foo bar
line 2
foo
我需要返回包含foo但不包含bar的行之前的行
在示例中,结果必须是:
line 2
foo
【问题讨论】:
文件test.txt中有如下内容:
line 1
foo bar
line 2
foo
我需要返回包含foo但不包含bar的行之前的行
在示例中,结果必须是:
line 2
foo
【问题讨论】:
grep -v bar fyle.txt | grep -B 1 foo
在 foo 之前获取一行,但不使用 bar
【讨论】:
使用awk,很容易将正则表达式匹配与逻辑运算符结合起来:
$ awk '/foo/ && !/bar/{printf "%s\n%s\n",last,$0}{last=$0}' file
line 2
foo
【讨论】:
您可以使用“负前瞻”表达式(需要使用 grep 的命令行参数 -P 启用 perl 正则表达式)
grep -P -B1 '(foo)(?!.*bar.*)' data.txt
【讨论】: