如何使用 grep 显示匹配模式的上一行而不是匹配行?

如何使用 grep 显示匹配模式的上一行而不是匹配行?

我知道我可以使用-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"

相关内容