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