我知道我可以使用-A
,-B
和-C
显示周围的线,但它们也都显示匹配的线。在这个示例文件中,我想要做的是:
foo
bar
我会做类似的事情grep <option> "bar" file
,我的输出应该是
foo
边注grep
:我知道与其他人一起做或使用的方法sed
,但我想只使用一次grep
答案1
对于以下人员来说,这是一项相当艰巨的工作sed
:
$ printf 'foo\nbar\n' | sed -n '$!N;/\nbar$/P;D'
foo
答案2
另一种解决方案
grep -B 1 "bar" test | head -n 1
它的优点是您不需要任何额外的正则表达式或匹配测试,因此效率更高,但这不适用于多个匹配
答案3
另一种可能的解决方案:
grep -B 1 "bar" test | sed '/bar/d'
答案4
您可以执行另一个忽略“bar”的 grep:
grep -B 1 "bar" test.txt | grep -v "bar"