bashを使用してxmlファイルのhtml文字エンティティを置き換える

bashを使用してxmlファイルのhtml文字エンティティを置き換える

XMLファイルには次の文字列があります。

&lt;h3&gt;Styled here with: &lt;a href="$url('Product-Show','pid','107723102')$"&gt;FRS blo&lt;/a&gt;, &lt;a href="$url('Product-Show','pid','000482512')$"&gt;Os Cutes&lt;/a&gt;&amp;nbsp;and &lt;a href="$url('Product-Show','pid','000312901')$"&gt;Dor Sho&lt;/a&gt;&lt;/p&gt;</short-description>

交換する必要があります /p&gt部分的に/h3&gt

私は以下の助けを借りてそれを試していますsed

sed -i -e 's/&lt;h3&gt;Styled here with\:.*\/p&gt;/&lt;h3&gt;Styled here with\:.*\/h3&gt;/g' new_exp_dev02.xml

しかし、これはまったく機能せず、結果は倍増します。

/p&gtたぶん部品を正しく交換するために、より多くの記号をエスケープするのを忘れましたか/h3&gt

ベストアンサー1

sed式ではほとんどすべての文字を区切り文字として使用できますが、エスケープエラーを制限するために置き換える文字列に区切り文字を使用しないことをお勧めします。

sed -e 's!/p&gt!/h3\&gt!g' new_exp_dev02.xml/p&gtに置き換えてください/h3&gt。代替のアンパサンド()は代替式で特別な意味を持つ&ため、エスケープする必要があります。sed

載せてくれた表現sedは読書も難しく、それで何を成し遂げたいかはよく分からないが「/p&gt部品を交換する/h3&gt」とは違う目的を持っているようです。

編集:この長い形式で式を作成する必要がある場合は、次のように動作します。

sed -e 's!\(&lt;h3&gt;Styled here with:.*\)/p&gt;!\1/h3\&gt;!g' new_exp_dev02.xml

これにより、一致する部品全体が逆参照に設定され、/p&gt交換部品として使用できます\1sed正規表現は一致にのみ使用されるため、交換側では正規表現を使用できません。

この答えの最初の式はのすべての項目を置き換え/p&gt/h3&gt2番目の式は/p&gt正規表現と一致した直後に発生した場合にのみ置き換えられます。"&lt;h3&gt;Styled here with:.*"

おすすめ記事