ワンライナーでバックスラッシュを処理しようとしてうっかりした件

とてもとても、基本的なことなのに5分ほど悩んでしまった。恥ずかしいついでに晒しあげ。

とあるプログラムがシングルクォート(')をバックスラッシュ(\)付で出力するのだが、これを取り除きたいと思った。だもんで、perlなら

  s/\\'/'/g;

とこうすれば出来るなーと頭で思いつつ、これをそのままワンライナーで実行してもバックスラッシュは付いたままになる。シェルがバックスラッシュを解釈しないように、さらにバックスラッシュを付けてエスケープしないと駄目ですよね。いやーまいったまいった。

$ ./hogehoge | perl -ple "s/\\'/'/g"
\'hoge\' 
$ ./hogehoge | perl -ple "/\\\\'/'/g"
'hoge'