在给定 XML 标记中使用 sed 替换所有“&”,但不将 XML 实体“&”中的“&”替换为“#”

在给定 XML 标记中使用 sed 替换所有“&”,但不将 XML 实体“&”中的“&”替换为“#”

我需要将所有内容替换&#, inside 且仅在<faultstring> ... </faultstring>标签内。此外,不应更改&in 。&amp;输入示例:

123&&<faultcode>IBM.Error<faultstring>special character & and one converted &amp;</faultstring></faultcode>&&123

预期输出:

123&&<faultcode>IBM.Error<faultstring>special character # and one converted &amp;</faultstring></faultcode>&&123

以下一项适用于边界,但也替换&amp;#amp;

sed -e :1 -e 's@\(<faultstring>.*\)&\(.*</faultstring>\)@\1#\2@;t1'

另外,我正在用文件替换这些模式。

PS:我创建了一个新问题以避免混淆我之前的话题。如果你们发现这可以合并到上一个线程中,请这样做。我只是希望新的线索能够吸引人们快速回答,并最大限度地减少混乱。

答案1

这对我有用:

sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@\1#\2\3@;t1' file

要将其替换为&amp;使用:

sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@\1\&amp;\2\3@;t1' file

相关内容