2009-06-22 3 views

Antwort

14

I ack lieben:

Welche würden geben Sie lieber?

$ grep pattern $(find . -type f | grep -v '\.svn')

$ ack pattern

+0

ack --python foo ist süß! –

+0

Ack ist die Bienen Knie. – seth

4

Sie können feststellen, dass Ihre Shell Ihnen hilft. Zum Beispiel in zsh, können Sie

grep foo **/*.py 

die Anzahl der Py-Dateien bereitgestellt, um die maximale Anzahl der Argumente für einen Befehl erlaubt nicht überschreitet (64k?). Beachten Sie, dass Sie die Datei globbing z.

grep foo **/*.py(mh-5) 

was Ihnen alles in den letzten 5 Stunden geändert hat.

+0

nicht besser, fast die gleiche Anzahl von Tastenanschlägen; –

+0

Daher die zsh globbing –

1
grep -r --include='*.py' foo * 
+3

Das ist eine seltsame Definition des Wortes "weniger" – skaffman

+0

Yeah. Weniger Verkettung fühlt sich für mich weniger besorgniserregend an, aber OP bat nicht um weniger Sorgen, er bat um weniger Tipparbeit. Bearbeitet zu etwas tatsächlich kürzer. Leicht. – chaos

1
find . -name "*.py" -exec grep -H foo '{}' ';' 
+3

Tipp: Beende deinen exec-Ausdruck mit einem '+' anstelle von ';', damit find alle übereinstimmenden Dateien an einen einzigen grep-Prozess sendet, anstatt einen neuen für jede passende Datei auszugeben. So viel effizienter. –

2

zsh hat rekursive Globbing, so dass Sie

grep foo **/*.py 

Schauen Sie MA tun können, keine find :)

UPDATE: Oh, wenn Sie auch eine Menge sie etwas tun tut nicht weh zu Alias ​​oder schreibe eine Funktion dafür natürlich

+0

Angesichts der Fähigkeit von zsh, dies zu tun, muss ich kaum mit der arkanen Syntax von find umgehen –

2

Es heißt Grep * wink * :-)

Alle py in aktuellem Verzeichnis

grep -R foo *.py 

Alle Dateien im aktuellen und jedes Unterverzeichnis

grep -R foo . 
+1

+1: -R ist Standard bei den meisten UNIX-Befehlen, um auch Unterverzeichnisse rekursiv zu durchsuchen. – Powerlord

+7

Müssen Sie Ihren Globbing nicht zitieren oder entkommen? Andernfalls wird die Shell dies im aktuellen Verzeichnis erweitern? –

+0

Sie haben Recht damit – jitter

3

Haben Sie ack versucht.

+0

Ja, Ack ist ein großartiger Ersatz für Grep (zumindest für Programmierer) – dfa

0

Ich benutze etwas sehr viel wie Ihr find/grep-Paar sehr, obwohl mit noch mehr Bedingungen - zum Beispiel Dateien in. Svn Verzeichnisse ausgeschlossen. Ich mache das so sehr, dass ich nur Skripte um diese Aufrufe herum gemacht habe, also kann ich "src-grep ..." nennen und es tun lassen, was du hier tust. (Dann fügte ich eine optionale Erweiterung für eine Anzahl von Kontextlinien hinzu, die an das grep -C-Flag übergeben wurde, und eine separate Version, um die Ergebnisse für Definitionsanweisungen zu grepsen.)

Dies ist nützlicher und schneller als rekursiv grep für mich.