今日はバックスラッシュエスケープのお話。
grepとかで正規表現を用いる時「.」や「-」など正規表現で使う文字列をエスケープしたい時にバックスラッシュを使うと思います。
perlでサーバのアクセスログを解析するスクリプトを書いていたんですが、「.」を検索文字列に入れたくて
grep '\.aaa' filename
とかやっていたのですが、スクリプトから実行するとうまく行かず。
grep .aaa filename
という状態のコマンドが発行されてしまいました。
何度か試したところ、コマンド生成時に一度、sshで投げた時に一度エスケープが認識されるようで結局
grep '\\\.aaa' filename
て感じで3回もバックスラッシュをつけることになってしまいました。
みっともな。。。
あとあと調べてみたらfgrepコマンド使えば正規表現が認識されないのでエスケープしなくてもいけるっぽい。
zgrepの正規表現認識されないのも調べればあるのかな。。。