如何在sed中使用单行替换两个模式之间的线?

如何在sed中使用单行替换两个模式之间的线?,第1张

概述这是我的输入文件: onetwothreefourfivesixseveneightnineten 我想把文件变成 onetwothreeNEW LINEeightnineten 与sed.也就是说,我想用单行NEW LINE替换/ four /(包括)到/ seven /(包括)的行. 我可以这样做 sed '/four/aNEW LINE/four/,/seve 这是我的输入文件:

onetwothreefourfivesixseveneightnineten

我想把文件变成

onetwothreeNEW liNEeightnineten

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

我可以这样做

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
总结

以上是内存溢出为你收集整理的如何在sed中使用单行替换两个模式之间的线?全部内容,希望文章能够帮你解决如何在sed中使用单行替换两个模式之间的线?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1021302.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存