我正在尝试用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过正。
答案 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}"