如何用sed替换文本的第一个匹配块?

时间:2019-04-05 09:25:24

标签: bash shell unix sed sh

我正在尝试用sed替换文本的第一个匹配块。 考虑这个例子。

read -r -d '' VAR <<"EOF"
<Button3d
some text
some text
/>

<Button3d
some text
some text
/>
EOF

sed '1,/^<Button3d/,/^\/>/c {
</Button\
different text\
different text\
/>\
}' <<< $VAR

但是使用GNU sed时,出现以下错误:

  

sed:-e表达式#1,字符15:未知命令:`,'

预期输出应为:

<Button
different text
different text
/>

<Button3d
some text
some text
/>

有人建议使用XML解析器,但是对于这个简单的示例来说,这完全是矫kill过正。

1 个答案:

答案 0 :(得分:0)

当您的sed支持-z时,您可以使用类似的

sed -z 's#/>#\r#g; s/<Button3d[^\r]*\r//; s#\r#/>#g' <<< "${VAR}"

编辑: 可以使用

插入其他文本
sed -z 's#/>#\r#g; s/<Button3d[^\r]*\r/<Button3d\nOther text\nSecond line\n\r/; s#\r#/>#g' <<< "${VAR}"