一尘不染

从文本文件中仅删除格式完整的行范围,而忽略仅具有开始定界符的行范围

linux

我要删除START和END关键字之间的行,如下所述:

START
text1
text2
text3
START
text4
END
text5
text6
START
test7
START
test8
END

我的问题是START关键字并非总是以END结束。从上面的示例中可以看出,第一个START不以END结尾,而是在TEXT3之后又另一个START。

所以我不能使用以下sed命令:

sed '/START/,/END/d' test.txt

因为它将删除从TEXT1到TEXT 4以及TEXT7-8的行。

但是我只想删除TEXT4和TEXT8行。因此,以下输出应为:

START
text1
text2
text3
text5
text6
START
text7

阅读 217

收藏
2020-06-07

共1个答案

一尘不染

通过逐行反转文件变得更加容易:

$ tac test.txt | sed '/END/,/START/d' | tac
START
text1
text2
text3
text5
text6
START
test7
2020-06-07