文字通り大なり記号(a ">")、スペース、バックスラッシュ文字( "\")が続く行、つまり次のような行を探しています:> \
私は、エスケープすることでこれが可能になると思いました。
$ ack-grep "\>"
">"が含まれている行を返します。
しかし、バックスラッシュもエスケープしようとすると、次のようになります。
$ ack-grep "\> \\"
ack-grep:無効な正規表現 '\> \':
正規表現m/\> /の末尾の\
うわー、私はとても近かった...一重引用符:
$ ack-grep '\> \\'
http://regexpal.com/ を使用して、正規表現の一致が有効であることを確認した後、これを理解しました。たまたま、他のことを試みたときに一重引用符がありました。
これも機能します:
$ ack-grep '> \\'
そしてそうします:
$ ack-grep "> \\\\"
大なり記号をエスケープする必要はありません。
リテラル文字列を検索するには、リテラルオプションを使用します。
ack-grep --literal '> \'
ここでの問題はackではなく、Shellの引用にあることに注意してください。引数として "> \"を渡そうとしたプログラムでは、この問題が発生します。