2009-07-30 8 views
23

Wenn ich den Befehl:Verwenden von grep zum Suchen von Dateien, die von find bereitgestellt werden: Was ist falsch bei find? | xargs grep '...'?

find . | xargs grep '...' 

ich die falschen Ergebnissen geführt. Ich versuche, die Zeichenfolge ... in allen Dateien im aktuellen Ordner zu suchen.

+3

Sie haben weitere Beispiele? –

+4

dann zuerst, müssen Sie lernen, wie Sie die Frage richtig stellen. technisch gesehen ist nichts falsch daran. Die Frage ist, was Sie tun möchten. Beschreibe es richtig und deutlich – ghostdog74

+0

meinst du, was bekomme ich als Antwort? – cupakob

Antwort

37

Wie Andy White sagte, haben Sie fgrep verwenden, um für Normal ., oder Flucht die Punkte zu entsprechen.

Also muss man schreiben (-type f nur die Dateien haben: Sie offensichtlich nicht wollen, die Verzeichnisse.):

find . -type f | xargs fgrep '...' 

oder wenn Sie wollen noch grep verwenden:

find . -type f | xargs grep '\.\.\.' 

und wenn Sie nur das aktuelle Verzeichnis und nicht seine subdirs:

find . -maxdepth 1 -type f | xargs fgrep '...' 
+2

'grep -F '...'' sollte genauso gut funktionieren – Hasturkun

+2

@Hasturkun: Ja. Ich habe einfach die Tendenz, andere Befehlsnamen als Extra-Optionen zu bevorzugen (zB 'gunzip' anstelle von' gzip -d'). Nur eine Frage des Geschmacks in der Regel. –

2

Wenn Sie buchstäblich grep '...' eingeben, passen Sie fast jede beliebige Zeichenfolge an. Ich bezweifle, dass Sie tatsächlich '...' für Ihre grep-Befehl eingeben, aber wenn Sie sind, wird die ... alle drei Zeichen übereinstimmen.

Bitte posten Sie weitere Informationen zu dem, was Sie suchen, und vielleicht kann Ihnen jemand weiterhelfen.

1

Wenn Sie sich für einen Dateinamen suchen, passt, versuchen:

find . -name "filename pattern" 

oder

find . | grep "filename pattern" 

Wenn Ihre Suche nach Dateien suchen diesem Spiel (dh es enthält die grep string)

find . | xargs grep "string pattern" 

funktioniert gut. oder einfach:

grep "string pattern" -R * 
+0

Ja, ich suche nach Dateien, die "..." als String enthalten, aber: 1. finden. | xargs grep "string pattern" oder 2. grep "string pattern" -R * hilft nicht. – cupakob

7

'.' passt auf jedes Zeichen, so dass Sie alle Zeilen finden, die 3 oder mehr Zeichen enthalten.

Sie können entweder die Punkte entkommen, wie folgt aus:

find . | xargs grep '\.\.\.' 

Oder Sie verwenden fgrep, die anstelle einem Regex eine wörtliche Übereinstimmung tut:

find . | xargs fgrep '...' 

(Einige Versionen von grep akzeptiere auch eine -F-Flagge, die sie wie fgrep verhalten lässt.)

-1

Um Jeremy Antwort abgeschlossen haben, können Sie die folgenden

find . -type f | xargs grep 'your_pattern' 

oder

find . -type f -exec grep 'your_pattern' {} + 

, die zu einem xargs ähnlich ist

wie ich hinzufügen möchte, um zu versuchen: RTFM! Oder in einer höflichen Art und Weise: Verwenden Sie & Missbrauch von

man command 

!

+1

Höflicher? Lesen Sie das Freundliche Handbuch? Wie könnte das als unhöflich angesehen werden? Höflicher Freak. :) –

+0

Manpages sind in der Tat ziemlich freundlich und freuen sich darauf, immer wieder gelesen zu werden. (Du hast meinen Tag gemacht, Jeremy XD) –

+0

Je später es wird, desto anstößiger scheinen meine Kommentare zu werden. Ich glaube, ich habe jetzt einen Höhepunkt erreicht. Es ist alles bergab von hier. –

5

@OP, wenn Sie nach Dateien suchen, ... enthalten,

grep -R "\.\.\." * 
+1

Bei weitem die einfachste Lösung. In grep ist die rekursive Dateisuche integriert. – duckbrain

Verwandte Themen