正確替換 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'

相關內容