如何用sed中的一行替换两个模式之间的行?

Ren*_*ger 3 awk sed

这是我的输入文件:

one
two
three
four
five
six
seven
eight
nine
ten
Run Code Online (Sandbox Code Playgroud)

我想把文件变成

one
two
three
NEW LINE
eight
nine
ten
Run Code Online (Sandbox Code Playgroud)

与 sed。也就是说,我想用单行替换从/four/(包括)到/seven/(包括)的行NEW LINE

我可以这样做

sed '/four/aNEW LINE
/four/,/seven/d' file.txt
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种更简单的方法,特别是一种无需重复模式的方法(因为我需要使用/four/)。

编辑根据fedorquis评论问题,这也可以在 awk 中(尽管出于“学术”目的,我对 sed 解决方案感兴趣。)

编辑 2不幸的是,输入文件表明输入文件中的单词具有逻辑顺序(一个后跟两个后跟三个等)。然而,在我的“现实世界”问题中,情况并非如此。我不知道文件有多少行,也不知道第四行和第七行之前或之后是什么。我唯一知道的是,有第四行(不一定立即)后跟第七行。我很抱歉在我提出问题时没有明确说明这一点,尤其是因为Fedorqui在他的回答中付出了很多努力。

gle*_*man 5

Perl 非常简洁,您不需要重复任何关键字:

perl -00 -pe 's/four.*seven/NEW_LINE/s'
Run Code Online (Sandbox Code Playgroud)