我有一个像下面这样的文件。我想删除 foo 之前的所有行,但只留下最后一个 bar 实例。输入:
bar1
foo
bar1
bar2
bar3
foo
bar5
bar6
bar7
foo
输出:
bar1
foo
bar3
foo
bar7
foo
有人可以帮助我如何做到这一点。我正在尝试使用 sed,但我所有的尝试都没有给出任何结果。
我希望不必如此sed
。使用grep
'-B
选项打印匹配的行和它之前的 1 行:
grep -B 1 foo input > output
使用awk
您可以执行以下操作:
awk '/^foo/ {print a "\n" $0} /^bar/ {a=$0}' file
bar1
foo
bar3
foo
bar7
foo
这可能对您有用(GNU sed):
sed '$!N;/^bar.*\nfoo/!D' file