notebook

都内でWEB系エンジニアやってます。

エスケープ

今日はバックスラッシュエスケープのお話。

grepとかで正規表現を用いる時「.」や「-」など正規表現で使う文字列をエスケープしたい時にバックスラッシュを使うと思います。

perlでサーバのアクセスログを解析するスクリプトを書いていたんですが、「.」を検索文字列に入れたくて

grep '\.aaa' filename

とかやっていたのですが、スクリプトから実行するとうまく行かず。

grep .aaa filename

という状態のコマンドが発行されてしまいました。

何度か試したところ、コマンド生成時に一度、sshで投げた時に一度エスケープが認識されるようで結局

grep '\\\.aaa' filename

て感じで3回もバックスラッシュをつけることになってしまいました。

みっともな。。。

あとあと調べてみたらfgrepコマンド使えば正規表現が認識されないのでエスケープしなくてもいけるっぽい。

zgrepの正規表現認識されないのも調べればあるのかな。。。