サンプルパスタグの現在の要素を次のように置き換えたいと思います。
...
<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ではありません。属性は引用する必要があります。