Mehr Informationen, als Sie sich vorstellen können.
Der Linux grep Befehl ist ein Dienstprogramm zum Vergleichen von Zeichenfolgen und Mustern, das übereinstimmende Zeilen aus mehreren Dateien anzeigt. Es funktioniert auch mit weitergeleiteten Ausgaben anderer Befehle. Wir zeigen Ihnen, wie das geht.
Der Grep Befehl in Linux
Der grep Befehl ist in Linux- und Unix- Kreisen aus drei Gründen berühmt. Erstens ist er ungeheuer nützlich. Zweitens kann die Fülle an Optionen überwältigend sein . Drittens wurde er über Nacht geschrieben, um ein bestimmtes Bedürfnis zu befriedigen. Die ersten beiden Punkte sind genau richtig; der dritte ist etwas daneben.
Ken Thompson hatte die Suchfunktionen für reguläre Ausdrückeed aus dem Editor extrahiert ( ausgesprochen „ee-dee“ ) und ein kleines Programm – für den eigenen Gebrauch – zum Durchsuchen von Textdateien erstellt. Sein Abteilungsleiter bei Bell Labs , Doug Mcilroy , wandte sich an Thompson und beschrieb das Problem, mit dem einer seiner Kollegen, Lee McMahon , konfrontiert war.
McMahon versuchte, die Autoren der Federalist Papers durch Textanalyse zu identifizieren. Er brauchte ein Tool, das nach Phrasen und Zeichenfolgen in Textdateien suchen konnte. Thompson verbrachte an diesem Abend etwa eine Stunde damit, sein Tool in ein allgemeines Dienstprogramm umzuwandeln, das von anderen verwendet werden konnte, und benannte es in um grep. Er entnahm den Namen der edBefehlszeichenfolge g/re/p, was übersetzt „globale Suche nach regulären Ausdrücken“ bedeutet.
Sie können sich ansehen, wie Thompson mit Brian Kernighan über die Geburt von spricht grep.
Einfache Suchen mit dem grep-Befehl
Um nach einer Zeichenfolge in einer Datei zu suchen, übergeben Sie den Suchbegriff und den Dateinamen in der Befehlszeile:
Es werden übereinstimmende Zeilen angezeigt. In diesem Fall handelt es sich um eine einzelne Zeile. Der übereinstimmende Text wird hervorgehoben. Dies liegt daran, dass bei den meisten Distributionen ein grepAlias für Folgendes verwendet wird:
Sehen wir uns Ergebnisse an, bei denen mehrere Zeilen übereinstimmen. Wir suchen in einer Anwendungsprotokolldatei nach dem Wort „Average“. Da wir uns nicht erinnern können, ob das Wort in der Protokolldatei klein geschrieben ist, verwenden wir die -i Option (Groß-/Kleinschreibung ignorieren):
Jede passende Zeile wird angezeigt und der passende Text wird jeweils hervorgehoben.
Wir können die nicht übereinstimmenden Zeilen mit der Option -v (Übereinstimmung umkehren) anzeigen.
Es erfolgt keine Hervorhebung, da es sich hierbei um die nicht übereinstimmenden Zeilen handelt.
Wir können grepvöllige Stille veranlassen. Das Ergebnis wird als Rückgabewert von an die Shell übergeben . Ein Ergebnis von Null bedeutet, dass die Zeichenfolge gefunden wurde, und ein Ergebnis von Eins bedeutet, dass sie nicht gefunden wurde. Wir können den Rückgabecode mit den speziellen Parameterngrep überprüfen : $?
Rekursive Suche mit grep
Um verschachtelte Verzeichnisse und Unterverzeichnisse zu durchsuchen, verwenden Sie die Option -r (rekursiv). Beachten Sie, dass Sie in der Befehlszeile keinen Dateinamen angeben, sondern einen Pfad. Hier suchen wir im aktuellen Verzeichnis „.“ und allen Unterverzeichnissen:
Die Ausgabe enthält das Verzeichnis und den Dateinamen jeder übereinstimmenden Zeile.
Wir können grepsymbolische Links erstellen, indem wir die -ROption (rekursive Dereferenzierung) verwenden. Wir haben in diesem Verzeichnis einen symbolischen Link namens logs-folder. Er zeigt auf /home/dave/logs.
Wiederholen wir unsere letzte Suche mit der -ROption (rekursive Dereferenzierung):
Dem symbolischen Link wird gefolgt und das Verzeichnis, auf das er verweist, wird ebenfalls durchsucht grep.
Suchen nach ganzen Wörtern mit dem grep-Befehl
Standardmäßig grepwird eine Zeile abgeglichen, wenn das Suchziel irgendwo in dieser Zeile vorkommt, auch in einer anderen Zeichenfolge. Sehen Sie sich dieses Beispiel an. Wir werden nach dem Wort „kostenlos“ suchen.
Die Ergebnisse sind Zeilen, die die Zeichenfolge „free“ enthalten, aber keine separaten Wörter sind. Sie sind Teil der Zeichenfolge „MemFree“.
Um grepdie ausschließliche Übereinstimmung mit einzelnen „Wörtern“ zu erzwingen, verwenden Sie die -wOption (Wort-Regulärer Ausdruck).
Diesmal gibt es jedoch keine Treffer, da der Suchbegriff „kostenlos“ als eigenes Wort in der Datei nicht vorkommt.
Verwenden mehrerer Suchbegriffe
Mit der -EOption (erweiterter regulärer Ausdruck) können Sie nach mehreren Wörtern suchen. (Die -EOption ersetzt die veraltete egrep Version von grep.)
Dieser Befehl sucht nach zwei Suchbegriffen: „average“ und „memfree“.
Zu jedem Suchbegriff werden alle passenden Zeilen angezeigt.
Sie können auch nach mehreren Begriffen suchen, die nicht notwendigerweise ganze Wörter sein müssen, es können aber auch ganze Wörter sein.
Mit der -eOption (Muster) können Sie mehrere Suchbegriffe in der Befehlszeile verwenden. Wir verwenden die Klammerfunktion für reguläre Ausdrücke, um ein Suchmuster zu erstellen. Sie weist darauf hin, grepdass jedes der in den Klammern „[]“ enthaltenen Zeichen übereinstimmen soll. Dies bedeutet, grepdass bei der Suche entweder „kB“ oder „KB“ übereinstimmt.
Beide Zeichenfolgen stimmen überein und einige Zeilen enthalten tatsächlich beide Zeichenfolgen.
Genau passende Zeilen
Der -x(Zeilen-Regexp) findet nur Zeilen, deren gesamte Zeile mit dem Suchbegriff übereinstimmt. Suchen wir nach einem Datums- und Zeitstempel, von dem wir wissen, dass er nur einmal in der Protokolldatei vorkommt:
Die einzelne übereinstimmende Zeile wird gefunden und angezeigt.
Das Gegenteil davon ist, nur die Zeilen anzuzeigen, die nicht übereinstimmen. Dies kann nützlich sein, wenn Sie sich Konfigurationsdateien ansehen. Kommentare sind großartig, aber manchmal ist es schwierig, die tatsächlichen Einstellungen zwischen all den Kommentaren zu erkennen. Hier ist die /etc/sudoersDatei:
Wir können die Kommentarzeilen effektiv wie folgt herausfiltern:
Das ist viel einfacher zu analysieren.
Nur übereinstimmenden Text anzeigen
Es kann vorkommen, dass Sie nicht die gesamte übereinstimmende Zeile, sondern nur den übereinstimmenden Text sehen möchten. Die -oOption (nur übereinstimmende) tut genau das.
Dabei wird die Anzeige auf den zum Suchbegriff passenden Text reduziert und nicht mehr die komplette passende Zeile angezeigt.
Zählen mit grep
Grep geht es nicht nur um Text, sondern kann auch numerische Informationen liefern. Wir können grep count auf verschiedene Weise für uns nutzen. Wenn wir wissen möchten, wie oft ein Suchbegriff in einer Datei vorkommt, können wir die -cOption (count) verwenden.
Grep meldet, dass der Suchbegriff 240 Mal in dieser Datei vorkommt.
Mit der Option (Zeilennummer) können Sie grep die Zeilennummer für jede übereinstimmende Zeile anzeigen lassen.-n
Die Zeilennummer für jede übereinstimmende Zeile wird am Anfang der Zeile angezeigt.
Um die Anzahl der angezeigten Ergebnisse zu reduzieren, verwenden Sie die -mOption (max count). Wir werden die Ausgabe auf fünf übereinstimmende Zeilen beschränken:
Kontext mit grep hinzufügen
Es ist oft nützlich, für jede übereinstimmende Zeile einige zusätzliche Zeilen – möglicherweise nicht übereinstimmende Zeilen – sehen zu können. Dies kann dabei helfen, zu unterscheiden, welche der übereinstimmenden Zeilen für Sie von Interesse sind.
Um nach der passenden Zeile noch ein paar Zeilen anzuzeigen, verwenden Sie die Option -A (after context). In diesem Beispiel fordern wir drei Zeilen an:
Um einige Zeilen vor der übereinstimmenden Zeile anzuzeigen, verwenden Sie die -BOption (Kontext davor).
Und um Zeilen vor und nach der übereinstimmenden Zeile einzuschließen, verwenden Sie die -COption (Kontext).
Anzeigen übereinstimmender Dateien
Um die Namen der Dateien anzuzeigen, die den Suchbegriff enthalten, verwenden Sie die -lOption (Dateien mit Übereinstimmung). Um herauszufinden, welche C-Quellcodedateien Verweise auf die sl.hHeader-Datei enthalten, verwenden Sie diesen Befehl:
Aufgelistet werden die Dateinamen, nicht die dazu passenden Zeilen.
Und natürlich können wir nach Dateien suchen, die den Suchbegriff nicht enthalten. -LGenau das macht die Option (Dateien ohne Übereinstimmung).
Zeilenanfang und Zeilenende
Wir können erzwingen, grep dass nur Übereinstimmungen angezeigt werden, die entweder am Anfang oder am Ende einer Zeile stehen. Der reguläre Ausdrucksoperator „^“ gleicht den Anfang einer Zeile ab. Praktisch alle Zeilen in der Protokolldatei enthalten Leerzeichen, aber wir werden nach Zeilen suchen, die ein Leerzeichen als erstes Zeichen haben:
Es werden die Zeilen angezeigt, die als erstes Zeichen – also am Zeilenanfang – ein Leerzeichen haben.
Um das Zeilenende abzugleichen, verwenden Sie den regulären Ausdrucksoperator „$“. Wir werden nach Zeilen suchen, die mit „00“ enden.
Auf dem Display werden die Zeilen angezeigt, deren letztes Zeichen eine „00“ ist.
Verwenden von Pipes mit grep
Natürlich können Sie die Eingabe an weiterleiten grep, die Ausgabe von grep an ein anderes Programm weiterleiten und sich grep in die Mitte einer Pipe-Kette einbetten.
Nehmen wir an, wir möchten alle Vorkommen der Zeichenfolge „ExtractParameters“ in unseren C-Quellcodedateien sehen. Wir wissen, dass es ziemlich viele davon geben wird, also leiten wir die Ausgabe weiter an less:
Die Ausgabe wird in dargestellt less.
Damit können Sie die Dateiliste durchblättern und less’sdie Suchfunktion verwenden synology beestation.
Wenn wir die Ausgabe von grep in weiterleiten und die Option (lines) wcverwenden , können wir die Anzahl der Zeilen in den Quellcodedateien zählen, die „ExtractParameters“ enthalten. (Wir könnten dies mit der Option (count) erreichen, aber dies ist eine gute Möglichkeit, das Weiterleiten von zu demonstrieren .) -l grep -c grep
Mit dem nächsten Befehl leiten wir die Ausgabe von lsin grep und von grep in weiter sort. Wir listen die Dateien im aktuellen Verzeichnis auf, wählen diejenigen aus, die die Zeichenfolge „Aug“ enthalten, und sortieren sie nach Dateigröße :
Lassen Sie uns das aufschlüsseln:
- ls -l : Führen Sie mit eine Auflistung der Dateien im Langformat durch ls.
- grep „Aug“ : Wählt die Zeilen aus der lsListe aus, die „Aug“ enthalten. Beachten Sie, dass dadurch auch Dateien gefunden werden, deren Namen „Aug“ enthalten.
- sort +4n : Sortiert die Ausgabe von grep nach der vierten Spalte (Dateigröße).
Wir erhalten eine sortierte Liste aller im August geänderten Dateien (unabhängig vom Jahr), in aufsteigender Reihenfolge der Dateigröße.
grep in Linux: Weniger ein Befehl, mehr ein Verbündeter
Grep ist ein großartiges Werkzeug, das Ihnen zur Verfügung steht. Es stammt aus dem Jahr 1974 und ist immer noch im Einsatz, weil wir das brauchen, was es kann, und nichts kann es besser.
Durch die Kopplung grep mit einigen regulären Ausdrücken wird das Ganze wirklich auf die nächste Ebene gebracht.