如何在最后一次出现字符串之前删除所有行。就像我有一个看起来像
的文件一样Icecream is good And Chocolate is good And They have lots of sugar
如果我想要在“And”的最后一次出现之后包括所有行,那么最干净的方法是什么?具体来说,我想要
<ul>
我正在做And
They have lots of sugar
,但我看到这给了我第一次出现。
答案 0 :(得分:5)
这可能适合你(GNU sed):
sed -n '/And/h;//!H;$!d;x;//p' file
用包含And
的行替换保留空间中的任何内容。将所有其他行追加到保留空间。在文件末尾,交换保留空间的模式空间,并在结果与所需字符串And
匹配时打印出结果。
答案 1 :(得分:1)
我知道你要求sed并且Potong提供了一个很好的sed解决方案。但是,为了比较,这是一个awk解决方案:
$ awk 's{s=s"\n"$0;} /And/{s=$0;} END{print s;}' file
And
They have lots of sugar
工作原理:
s{s=s"\n"$0;}
如果变量s
不为空,则向其添加当前行$0
。
/And/{s=$0;}
如果当前行包含And
,请将s
设置为当前行$0
。
END{print s;}
在我们到达文件末尾后,打印s
。
答案 2 :(得分:-2)
$ tac file | awk '!f; /And/{f=1}' | tac
And
They have lots of sugar
$ awk 'NR==FNR{if(/And/)nr=NR;next} FNR>=nr' file file
And
They have lots of sugar