我需要将所有内容替换&
为#
, inside 且仅在<faultstring> ... </faultstring>
标签内。此外,不应更改&
in 。&
输入示例:
123&&<faultcode>IBM.Error<faultstring>special character & and one converted &</faultstring></faultcode>&&123
预期输出:
123&&<faultcode>IBM.Error<faultstring>special character # and one converted &</faultstring></faultcode>&&123
以下一项适用于边界,但也替换&
为#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
要将其替换为&
使用:
sed -e :1 -e 's@\(<faultstring>.*\)&\([^amp;]\)\(.*</faultstring>\)@\1\&\2\3@;t1' file