2

ack の奇妙さ (betterthangrep.com) - 行番号が表示されることもあれば、表示されないこともあります。

最初の例では、いくつかの Python ファイルで単純なフレーズを探します。正常に動作し、行番号 233 が表示されます。2 番目の例では、最初の列が「5」で終わるすべての行を探します。

D:\DSWProj\2012L\src> perl D:\ack-standalone.pl  "return True"  *.py
Volume5.py
233:    return True


D:\DSWProj\2012L\data\R123> perl D:\ack-standalone.pl  "5 "  NeedMoreCoffee_n5_*.data
Volume5 FooData  coffee_n5  2013-01-29 10:14
 397125 0 0 1 0
 397135 0 0 1 0

これらの 2 行は、ヘッダー行に続くファイルの最初の 2 行です。

この 2 番目の例に行番号がないのはなぜですか? また、ファイル名は印刷されておらず、色付けもされていません。Python の例では出力が色付けされます。行番号は黄色、ファイル名は緑色です。(最後に尋ねたときから驚いたことに、Windows コマンド ライン シェルは何も色付けできないとのことでした。) これは ack のバグですか、それとも Windows の癖ですか? 異なるファイルで異なるものを明らかに検索する以外に、2 つのケースで無意識のうちに異なることをしたのでしょうか?

2 日前 (2013 年 1 月 28 日) にダウンロードされた Strawberry Perl 5.16.2 を使用して Windows 7 64 ビットで実行され、2 日前にダウンロードされた ack スタンドアロン スクリプト バージョン 1.96 も使用されます。

4

1 に答える 1

3

ackファイルが Python ソース コードであることを魔法のように* 認識していると思います。*.pyソース コード ファイルの行番号と色分けは表示されますが、*.data. これは機能であり、バグではありません。

の予測可能で構成可能な代替が必要な場合はgrep、 を試してくださいgrep。;)

* – もちろん、魔法のようなものではありません。.ackrcファイルで構成可能です。詳細については実行ack --help-typesしてください。

編集:私は間違っています!と の違いによるものではありませ.py.dataack pattern f1との違いによるものack pattern f1 f2 ...です。後者の場合、どのファイルに一致が含まれているかをack表示します。前者 (単一ファイル) の場合、 のように動作します。f1 f2 ...ackgrep

1 つのファイルであっても行番号を生成するように騙すackには、行末に偽のファイルを追加します。Cygwinの場合、おそらくできるでしょう

perl D:\ack-standalone.pl  "5 "  NeedMoreCoffee_n5_*.data /dev/null

Windows の場合、これはまだ機能する可能性があります。

perl D:\ack-standalone.pl  "5 "  NeedMoreCoffee_n5_*.data NUL

(これは文字どおり NUL の文字で、Windows の綴り/dev/nullです。CON、LPT1 なども参照してください)。

于 2013-02-01T00:47:21.450 に答える