2012-03-28 3 views
4

ack (die grep in Perl geschriebene Tool) findet keine Datei, die grep -r findet, und ich kann nicht die richtigen Optionen finden, um es zur Arbeit zu bekommen. Die folgende Tabelle zeigt, dass ack die Zielzeichenfolge, die sich in einer regulären Datei in einem Unterverzeichnis befindet, nicht gefunden hat. Es ist auf Bash-Shell (Ubuntu 11.04):ack macht keine rekursive grep

100 $ grep -r imbue * 
    hel/find:    the fact that some shells including Bash imbue braces 
    ## Note: grep find it as shown in the above. 

101 $ ./ack-standalone imbue 
    ## Note: ack didn't find it as shown in the above. 

102 $ ./ack-standalone --version 
    ack 1.96 
    Running under Perl 5.10.1 at /usr/bin/perl 

    Copyright 2005-2011 Andy Lester. 

    This program is free software. You may modify or distribute it 
    under the terms of the Artistic License v2.0. 

    ## This is the testing folder structure: 
103 $ tree 
    . 
     ack-standalone 
     hel 
      |- dot 
      |- find 
      |- grep 
      |- jobs 
     perlman 
     perlre 
     perlrequick 
     perlrun 
     perlvar 
     xargs 

    1 directory, 11 files 

Version 2 von ack, von apt-get Paketinstallation gleichen Ergebnisse erhielt. In der oben gezeigten Stand-Alone-Version (Version 1). ack -f zeigt nichts, und ich habe die -r und * Optionen versucht, alle mit den gleichen Ergebnissen.

Auf einer anderen Maschine, Ubuntu 10.04, funktioniert es wie ein Charme.

Antwort

8

Es funktioniert für mich, wenn ich in allen Dateien unabhängig von ihrer Art zu arbeiten wählen, (ist meine Version gleicht, dass Sie) -a Schalter:

ack -a imbue * 
+0

mit der '-a' Option, es beginnt Arbeit. –

+0

Ack 1.x sucht nur Dateien von Typen, die es versteht. Grundsätzlich durchsucht ack nur den Quellcode in Dateien, die aufgrund der Erweiterung als Quellcode erkannt werden. Es ist kein allgemeiner Ersatz für Grep. Auch im 'ack -a imbue *' Beispiel sollte das '*' nicht enthalten sein. Sie möchten niemals einen Dateinamen für ack angeben, es sei denn, Sie haben einen Grund, einen Dateinamen für ack anzugeben. –

+0

"Es ist kein allgemeiner Ersatz für Grep." Die erste Zeile der 'ack' man page lautet:" Ack ist als Ersatz für 99% der Verwendungen von grep gedacht. " – jwg