~によるとこのスレッド:
Q:ackはPerlから派生した正規表現を使用していることを知っています。これは正しいですか?
答え:はい。実際、ackはPerlで書かれており、式を内部エンジンに渡します。
現在、ディレクトリに次のファイルがあります。
media_group_xml_producer.py
私がするとき:
> ack -n '.*group.*producer.*'
またはより直接的に:
> ack -n --python '.*group.*producer.*'
結果はありません。私が知る限り、正規表現はファイルと一致する必要があります。なぜそれを逃したのですか?
ベストアンサー1
現在のディレクトリからファイル名をgrepする必要がある場合
ack はファイル名ではなくファイルの内容と一致します。名前が正規表現と一致するファイルを見つけるには、ファイル名リストに対してackを実行します。
ls | ack '.*group.*producer.*'
あなたは何をしましたか?
ack -n '.*group.*producer.*'
現在のディレクトリでファイルを探します含む正規表現に一致する項目です。
サブディレクトリパスを含むフルファイル名に対して正規表現を実行する場合
ls
パスとファイル名を印刷するオプションがないため、切り捨てられません。代わりに、(インデント行を印刷しない)フラグと(フルファイル名を印刷)tree
フラグを使用してください。-i
-f
tree -if | ack 'shepherd.*\.pyc?'
返品
./models/shepherd.py
./models/shepherd.pyc
./services/shepherd-related/flock_of_sheep.py
./services/shepherd-related/flock_of_sheep.pyc
もちろん、上記の内容はすべてgrep
に適用されますack
。しかし、ack
すべての点で確かに良いです。 :-)