読者です 読者をやめる 読者になる 読者になる

ag(the silver searcher)でリテラル検索

agは内部でpcreを使っているようで、デフォルトで .ワイルドカードとして扱われてしまう。ドットそのものを検索するには

ag -Q .save ./lib 

のように-Q(--literal、または-F)オプションを指定する。

-Qの代わりに2重のバックスラッシュでエスケープしても良い。正規表現エンジンに \. を渡せばドットはただの文字リテラルとして扱われる。しかし \ はシェル上でも特殊文字なので \ でエスケープしなくてはならない。

ag \\.save ./lib 

$正規表現で末尾を示す記号であるため、Qオプションが必要だが、 $set はシェル変数として展開されてしまうので バックスラッシュでエスケープする必要がある

ag -Q \$set ./lib

-Qなしの場合は、 \$set という文字列を正規表現に渡すため、 \$ の両方をエスケープする必要がある。

ag \\\$set ./lib

\$ がシェル上で展開されないように、シングルクオートで囲っても良い

ag '\$set' ./lib
ag '\.save' ./lib