sed でシングルクォートをエスケープしようとしたら構文として認識されない。
例えば以下の文字列が書かれたファイルがあったとする。
1 2 | $ vi hoge.txt aaa'bbb |
ここで以下のコマンドを実行すると、コマンドが成立していない状態となる。
1 | $ sed -e 's/'//g' hoge.txt |
どうやら、’ ではエスケープしてくれないようだ。
というよりも、囲んでいる文字の問題。
ここでは sed でシングルクォートを置換する方法を紹介します。
シングルクォートのエスケープ
ちなみに、下記の通りダブルクォーテーションで sed の引数を囲んでやるとうまくいく。
これは想定通り。
1 | $ sed -e "s/'//g" hoge.txt |
同じことを perl でおこうなうと以下の通り。
1 | $ perl -i.bak -ne "s/'//g;print;" hoge.txt |
ってことで、純粋にエスケープの問題。
シングルクォートを使ってシングルクォートのエスケープ
置換対象のシングルクォートをエスケープしてシングルクォート囲えばば、両サイドをシングルクォートで囲んでも問題ない。
ちょっとややこしいですが・・・。
1 | $ sed -e 's/'\''//g' hoge.txt |