正确替换 XML 中的 & 吗?

正确替换 XML 中的 & 吗?

我想将“&”替换为& “除了以下出现的 XML 特殊字符”。

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

我尝试了中提到的方法替换两个字符串之间的指定字符?在给定 XML 标记中使用 sed 替换所有“&”,但不将 XML 实体“&”中的“&”替换为“#”似乎不适合我。

答案1

使用 perl 一行:

perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g'

-p标志使 perl 的行为类似于 sed(循环 STDIN 行、执行操作、打印到 STDOUT),-e告诉它从参数而不是文件读取命令。

正则表达式替换的作用是:

  • 匹配&
    • 没有跟随
    • quot或者apos...amp
    • 分号
  • 用。。。来代替&amp;
  • 对于所有在线比赛。

像 sed 一样使用它,例如

perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g' < my-file.xml
./myscript.sh | perl -pe 's/&(?!(quot|apos|lt|gt|amp);)/&amp;/g'

相关内容