这是我的输入文件:

one
two
three
four
five
six
seven
eight
nine
ten

我想把文件变成
one
two
three
NEW LINE
eight
nine
ten

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

我可以做到
sed '/four/aNEW LINE
/four/,/seven/d' file.txt

但是我想知道是否有一种更简单的方法,尤其是一种无需重复模式的方法(就像我需要使用/four/一样)。

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

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

最佳答案

这可能适合您(GNU sed和bash):

sed $'/^four/{:a;N;/^seven/McNEWLINE\nba}' file

09-25 17:42
查看更多