Mit grep Dateien zu suchen, indem Fund zur Verfügung gestellt: was mit find falsch ist. | xargs grep '...'?

StackOverflow https://stackoverflow.com/questions/1204781

Frage

Wenn ich den Befehl:

find . | xargs grep '...'

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

War es hilfreich?

Lösung

Wie Andy White sagte, haben Sie fgrep verwenden, um zu einfachem . übereinstimmen, oder die Punkte zu entkommen.

Sie haben also zu schreiben (-type f ist nur die Dateien haben. Sie offensichtlich nicht wollen, die Verzeichnisse):

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

oder wenn Sie wollen immer noch grep verwenden:

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

Und wenn Sie möchten, die Strom Verzeichnis und nicht seine subdirs:

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

Andere Tipps

'' alle Zeichen übereinstimmt, so dass Sie alle Linien zu finden sein werden, die drei oder mehr Zeichen lang sein.

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

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

Sie können auch fgrep verwenden, das tut eine wörtliche Übereinstimmung anstelle eines Regex:

find . | xargs fgrep '...'

(Einige Versionen von grep auch eine Option -F akzeptieren, die sie wie fgrep verhalten macht.)

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

grep -R "\.\.\." *

Wenn Sie buchstäblich grep '...' eingeben werden werden Sie fast jede Zeichenfolge übereinstimmen. Ich bezweifle, Sie tatsächlich '...' für Ihren grep Befehl eingeben, aber wenn Sie sind, passen die ... alle drei Zeichen.

Bitte senden Sie weitere Informationen auf, was Sie suchen, und vielleicht jemand kann mehr helfen.

Wenn Sie sich für eine Dateiname , das passt, versuchen Sie suchen:

find . -name "filename pattern" 

oder

find . | grep "filename pattern"

Wenn Ihr für die Suche nach Dateien dieses Spiel suchen (dh es enthält die grep string)

find . | xargs grep "string pattern"

funktioniert. oder einfach:

grep "string pattern" -R *

Um Jeremy Antwort abgeschlossen ist, können Sie auch versuchen wollen

find . -type f | xargs grep 'your_pattern'

oder

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

, die zu einer xargs ähnlich ist

Ich möchte hinzufügen: RTFM! Oder in einer höflichen Art und Weise: Mit & Missbrauch von

man command

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top