XML 内の & を正しく置き換えていますか?

XML 内の & を正しく置き換えていますか?

& 次の XML 特殊文字を除いて、「&」を置き換えたいです。

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

私は、2 つの文字列間の指定された文字を置き換えますか?そして特定の 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'

関連情報