次のようなXMLファイルでいっぱいのディレクトリがあり、その「オフセット」要素番号の値を1から他の番号に変更したいと考えています。
$ cat my.xml
<offset xmlns="">1</offset>
この sed コマンドのさまざまな組み合わせを記述しましたが、試したものはどれもエラーなしで実行されませんでした。一部の文字をエスケープする必要があることは確かですが、試したものは常にエラー (「予期しないトークン」、「不明なオプション」など) で終わります。また、実際には式ではないため、-e フラグなしでも試しました。
sed -i -e s/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml
ご協力いただければ幸いです。
答え1
sed ではを使用する必要はなく/
、たとえばカンマを使用できます。
sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE
答え2
これを試して、
$ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file
<offset xmlns="">99</offset>
入力にスラッシュが含まれている場合は、別の sed 区切り文字を使用します。
答え3
通常、関数自体にこれらすべてが必要なわけではなくs/earch/replace/
、代わりに first /address/
then conditionallyを使用/s///
できます。これにより、読みやすさが向上し、言及した問題のいくつかを回避できるだけでなく、パフォーマンスも向上します。
sed '/offset xmlns=/s/>1</>99</'
答え4
次の値を含む行の 17 番目の文字を置き換えます。
sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml
VALUE を の新しい値に置き換えます<offset>
。例:
sed -i 's/^\(.\{17\}\)./\18/' file.xml
8に変更します。