特殊文字でsedを使用する

特殊文字でsedを使用する

以下のように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に変更します。

関連情報