currencyId="GBP"
xmlファイルからこの文字列を削除したいです。最初の文字cの前にスペースがあることに注意してください。データの解析に問題があります。その文字列(初期スペースを含む)を削除すると、操作が簡単になります。 sedを使用できることはわかっていますが、文字列の先頭にあるスペースと二重引用符があるため、これまでの試みは泥棒に陥っているようです。
これを明確にするために、以下はXMLの例です。
<location>Ethiopia</location><country>ET</country><shippingInfo>
<shippingServiceCost currencyId="GBP">2.83</shippingServiceCost>
<shippingType>Flat</shippingType>
<shipToLocations>Worldwide</shipToLocations></shippingInfo><sellingStatus>
<currentPrice currencyId="USD">157.5</currentPrice>
<convertedCurrentPrice currencyId="GBP">111.45</convertedCurrentPrice>
目標を達成すると、ConvertCurrentPrice 行に次のように表示されます。
<convertedCurrentPrice>111.45</convertedCurrentPrice>
答え1
sed -i 's/ currencyId="GBP"//' file.xml
- これは私にとって効果的です。g
すべてのインスタンスを置き換えるには、sedコマンドの最後に追加します。
答え2
文字列をグローバルに置き換えるかどうかを指定していないので、特定の行を置き換えると仮定するため、コマンドは次のようになります。
sed -i '6s+currencyId="GBP"++' ファイル名.xml編集する前にファイルをバックアップするのが最善です。したがって、安全のために使用します。
sed -i.bak '6s+currencyId="GBP"++' ファイル名.xml
答え3
xmlstarlet
コマンド
xmlstarlet ed -d '//convertedCurrentPrice/@currencyId[. = "GBP"]' file.xml
currencyId
属性値があると仮定すると、文書全体のすべてのノードからすべての属性が削除されます。convertedCurrentPrice
GBP