so finden Sie Dateien, die eine Zeichenfolge mit egrep
Möchte ich die Dateien finden, die bestimmte Zeichenfolge unter linux.
Ich habe versucht, so etwas wie, aber nicht gelingen konnte:
finden . -name *.txt | egrep mystring
InformationsquelleAutor Tolga | 2009-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier, die Sie senden die Datei-Namen (Ausgabe des
find command
), die als Eingabe für egrep; Sie wirklich wollen, zu führen egrep auf den Inhalt der Dateien.Hier sind ein paar alternativen:
oder noch besser
Überprüfen Sie die Befehl suchen helfen zu überprüfen, was die einzelnen Argumente haben.
Der erste Ansatz erzeugen Sie einen neuen Vorgang für jede Datei, während mit dem zweiten Durchgang mehr als eine Datei als argument an egrep;- print0 und -0 flags nötig sind, um potentiell bösen Dateinamen (so dass auf separate Datei-Namen korrekt, selbst wenn ein Dateiname ein Leerzeichen enthält, zum Beispiel).
\+
oder\;
am Ende Ihres ersten Befehl.Funktioniert das nicht, Versuch zu finden, die mit dem Namen in mystring? Ich denke, er sucht die andere Weise herum.
vielen Dank für die Anmerkung, ich behoben, durch das Beispiel.
ja, du hast Recht. Behoben, danke 🙂
praktisches feature über \+ ist, + ist nicht ein besonderer Charakter zu den meisten shells (ich weiß nicht, Hüllen, wo es eine Besondere ist, aber ich bin ungern zu sagen, alle), so brauchen Sie nicht den backslash.
InformationsquelleAutor Paolo Tedesco
versuchen:
Gibt es zwei Probleme mit Ihrer version:
Erstens,
*.txt
zunächst erweitert werden, indem die Schale, so dass Sie eine Liste der Dateien im aktuellen Verzeichnis, welches Ende.txt
, so zum Beispiel, wenn Sie Folgendes haben:Ihre
find
Befehl wird wiederum infind . -name test.txt
. Versuchen Sie einfach die folgenden zur Veranschaulichung:Zweitens,
egrep
nicht nehmen Dateinamen ausSTDIN
. Konvertieren Sie Argumente, die Sie verwenden müssenxargs
Ich möchte mich bei allen bedanken, die solche umfassenden Antworten.
InformationsquelleAutor dsm
Dass wird nicht funktionieren, wie
egrep
suchen fürmystring
in die erzeugte Ausgabe durchfind . -name *.txt
die nur den Pfad zu*.txt
- Dateien.Verwenden Sie stattdessen
xargs
:InformationsquelleAutor Alan Haggai Alavi
Könnten Sie
InformationsquelleAutor Wienczny
Hier ist ein Beispiel, das die Rückkehr der Datei Pfade alle
*.log
- Dateien mit einer Zeile, die beginnt mitERROR
:InformationsquelleAutor Kevin
gibt es eine rekursive option von egrep können Sie
Vielleicht mit
egrep -R "pattern" --include=*.log .
?InformationsquelleAutor ghostdog74
Wenn Sie möchten, dass nur die Dateinamen:
Wenn Sie möchten, Dateinamen und Spiele:
InformationsquelleAutor wallenborn