2009-02-26 7 views

Antwort

10
grep google *.php 

wenn Sie wollen viele Verzeichnisse zu überbrücken:

find . -name \*.php -print0 | xargs -0 grep -n -H google 

(wie in den Kommentaren erklärt, -H ist nützlich, wenn xargs mit nur einem verbleibenden Datei kommt)

+0

Findet der letztere Code Unterverzeichnisse oder Master-Verzeichnisse? –

+0

Sie brauchen den Namen, weil Sie vielleicht nicht wissen, welche Datei es war - besonders, wenn es ein böser Bruch ist, dass Xargs die Dinge zusammengelegt haben und eine einzige Datei übrig geblieben ist. –

+0

Vergessen Sie nicht, dass Sie -print0 verwenden müssen, um -0 bis xargs zu finden, wenn Sie in einem Verzeichnisbaum arbeiten, der Namen mit eingebetteten Leerzeichen enthält. –

0

Use „man grep "um andere Funktionen zu sehen.

for i in $(ls *.php); do grep -n --with-filename "google" $i; done; 
+0

das wird nicht funktionieren - die Eingabedatei ist "stdin", wenn der Befehl auf diese Weise geschrieben wird – Alnitak

+0

Sie haben Recht. Changed den Code zu arbeiten. –

5

Sie nicht tun

$ *.php | grep 

sollten das bedeutet, „das erste PHP-Programm, mit dem Namen der übrigen Wildcards als Parameter ausführen, und dann grep läuft am Ausgang“.

Es sollte sein:

$ grep -n -H "google" *.php 

Die -n Flagge es Zeilennummern zu tun erzählt, und die -H Flag teilt es den Dateinamen angezeigt werden, selbst wenn es nur Datei ist. Grep zeigt standardmäßig die Dateinamen an, wenn mehrere Dateien durchsucht werden, aber Sie möchten wahrscheinlich sicherstellen, dass die Ausgabe konsistent ist, unabhängig davon, wie viele übereinstimmende Dateien vorhanden sind.

0
find . -name "*.php" -print | xargs grep -n "searchstring" 
1
find ./*.php -exec grep -l 'google' {} \; 
+0

Das bekommt die Dateinamen, aber nicht die Zeilennummern, oder? –

2

Bitte nehmen Sie sich einen Blick auf ack bei http://betterthangrep.com. Das Äquivalent in ack von dem, was Sie versuchen, ist:

ack google --php