ファイルの引用符をsedに置き換える方法は?

ファイルの引用符をsedに置き換える方法は?

複数行のXMLを含むファイルがあります。ファイルの一部を置き換えたいです。ファイルの一部に"置換したい引用符()が含まれています。頑張ってきた脱出するquote\ですが、私のファイルの結果によると、これはうまくいかないようです。

以下は私のsedコマンドの1つの例です。

sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp

これがsedコマンドで引用符を避ける方法ですか、それとも私が間違っているのですか?

ベストアンサー1

2つのヒント:

  1. 一重引用符で囲まれた文字列では、一重引用符をエスケープできません。したがって、引用符を閉じてエスケープされた引用符を追加してから、引用符を再度開く必要があります。つまり、'foo'\''bar'次のように分解されます。

    • 'foo'        リーダーfoo
    • \'             脱出する'
    • 'bar'        リーダーbar

    生産するfoo'bar

  2. /(オプション)必ずしもsedで使用する必要はありません。同じsed式で/andを使用すると\読みにくいことがわかりました。

たとえば、このファイルから引用符を削除するには、次のようにします。

$ cat /tmp/f
aaa"bbb"'ccc'aaa

上記の2つのヒントを考慮すると、二重引用符と一重引用符を削除するために使用できるコマンドは次のとおりです。

$ sed -e 's|["'\'']||g'  /tmp/f

最初のヒントによると、シェルはsedの2番目の引数(後に続く文字列-e)をに減らし、s|["']||gその文字列をsedに渡します。 2番目のヒントによると、sedはこれをs/['"]//g

'orに一致するすべての文字を削除します"   (つまり、nullに置き換えます)。

必要なものを達成するには、これよりも複雑なものが必要になるかもしれませんが、始めるだけです。

おすすめ記事