用另一行SED语法替换3行

时间:2012-08-29 13:45:48

标签: sed

这是一个简单的问题,我不确定我能否用sed / awk做到这一点 如何对这三行进行sed搜索并用一个确定字符串的行替换?

<Blarg>
<Bllarg>
<Blllarg>

替换为

<test>

我尝试使用sed "s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/g"但它似乎没有找到这些行。可能是我的断行符(?)\n。我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

因为sed通常一次只处理一行,所以你的模式永远不会匹配。试试这个:

sed '1N;$!N;s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/;P;D' filename

答案 1 :(得分:2)

这可能对您有用:

sed '/<Blarg>/ {N;N;s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/}' <filename>

它的工作原理如下:

  • 搜索文件,直至找到<Blarg>
  • 然后使用N;N;
  • 将以下两行附加到当前模式空间
  • 检查当前模式空间是否与<Blarg>\n<Bllarg>\n<Blllarg>
  • 匹配
  • 如果是,请将其替换为<test>

答案 2 :(得分:0)

您可以将 range addresses 与正则表达式和 c 命令一起使用,它完全符合您的要求:

sed '/<Blarg>/,/<Blllarg>/c<test>' filename