bashでPATH要素をxmlファイルのSEDに取得して置き換える方法

bashでPATH要素をxmlファイルのSEDに取得して置き換える方法

サンプルパスタグの現在の要素を次のように置き換えたいと思います。

...
<examples>
<example path='/test/test123/test12345.txt'/>
<examples>
...

到着

...
<examples>
<example path=/test/test123/>
<examples>
...

そして

sed -i 's/<example path=\/test\/test123\/test12345.txt'>/<example path=\/test\/test123\/>' 123.xml

しかしそれは言う:

-bash: example: No such file or directory

ベストアンサー1

一重引用符が一致しないため、エラーが発生します。

引用符付きの文字列は、2番目の引用符で終わります。シェルは引用解除された内容を表示し、>/<exampleそれをリダイレクトとして解釈します。

また、sedコマンドが不完全です。/末尾の区切り記号がありません。

sed編集した入力データと一致するようにコマンドも変更しました。

コマンドに一重引用符を使用するには、sedコマンドの周囲に二重引用符を使用し、二重引用符内の内容がシェルによって拡張されないようにする必要があります。

sed -i "s/<example path='\/test\/test123\/test12345.txt'\/>/<example path=\/test\/test123\/>/" 123.xml

または、次のようにエスケープされた単一引用符を使用します。

sed -i 's/<example path='\''\/test\/test123\/test12345.txt'\''\/>/<example path=\/test\/test123\/>/' 123.xml

注:/スラッシュ以外の区切り文字を使用している場合は、パターンまたは置換でスラッシュをエスケープする必要はありません。

sed -i "s#<example path='/test/test123/test12345.txt'/>#<example path=/test/test123/>#" 123.xml
sed -i 's#<example path='\''/test/test123/test12345.txt'\''/>#<example path=/test/test123/>#' 123.xml

質問に表示される希望の出力は有効なXMLではありません。属性は引用する必要があります。

おすすめ記事