ack kehrt beim Angeben eines Dateimusters nicht zurück

1425
sashang
ack "#define" 

wird in Unterverzeichnisse rekursieren und Dateien finden, die #define enthalten. Aber ich wollte die Suche auf * .h-Dateien beschränken, also habe ich es versucht

ack "#define" *.h 

und es kehrt nicht mehr zurück. Die einzigen Ergebnisse stammen von Dateien im Arbeitsverzeichnis.

Ausführung:

ack 1.96 Läuft unter Perl 5.14.2 unter / usr / bin / perl

3
Siehe auch [this] (http://superuser.com/q/97910/1686), [this] (http://superuser.com/q/332442/1686), [this] (http: // superuser). com / q / 246061/1686), ... grawity vor 12 Jahren 0

1 Antwort auf die Frage

4
grawity

Der Platzhalter *.hwird von Ihrer Shell erweitert, und ack empfängt nur einzelne Dateien als Argumente - es gibt keinen Platz, zu dem Sie zurückkehren können.

Um dies zu vermeiden, geben Sie den Platzhalter innerhalb einfache oder doppelte Anführungszeichen, aber ack wird wahrscheinlich nicht erkennen es als Platzhalter: ack "#define" "*.h".

Eine bessere Option ist es --hh, nur Header-Dateien einzuschließen (siehe --help type) oder -G '\.h$'nur Dateien einzuschließen, die mit dem angegebenen Perl-Regex übereinstimmen.

In ack2 können Sie anstelle von -G (das entfernt wurde): ack -g '\ .h $' | ack -x '#define' jondro vor 10 Jahren 1