0

我有一个像下面这样的文件。我想删除 foo 之前的所有行,但只留下最后一个 bar 实例。输入:

bar1
foo
bar1
bar2
bar3
foo
bar5
bar6
bar7
foo

输出:

bar1
foo
bar3
foo
bar7
foo

有人可以帮助我如何做到这一点。我正在尝试使用 sed,但我所有的尝试都没有给出任何结果。

4

3 回答 3

6

我希望不必如此sed。使用grep'-B选项打印匹配的行和它之前的 1 行:

grep -B 1 foo input > output
于 2013-11-08T07:01:41.757 回答
1

使用awk您可以执行以下操作:

awk '/^foo/ {print a "\n" $0} /^bar/ {a=$0}' file
bar1
foo
bar3
foo
bar7
foo
于 2013-11-08T07:22:52.713 回答
0

这可能对您有用(GNU sed):

sed '$!N;/^bar.*\nfoo/!D'  file
于 2013-11-08T15:01:24.987 回答