以下のように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/
一般に、関数自体ではこれはすべて必要ありませんが、最初に/address/
条件付きで実行できます/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に変更します。