GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie den Linux-Grep-Befehl

Einer der klassischen Unix-Befehle, der bereits 1974 von Ken Thompson entwickelt wurde, ist der Befehl Global Regular Expression Print (grep). Es ist in der Computerwelt so allgegenwärtig, dass es häufig als Verb verwendet wird („durch eine Datei greifen“) und je nachdem, wie geekig Ihr Publikum ist, passt es auch gut in reale Szenarien. (Zum Beispiel:„Ich muss meine Speicherbänke grep durchsuchen, um diese Informationen abzurufen.“) Kurz gesagt, grep ist eine Möglichkeit, eine Datei nach einem bestimmten Zeichenmuster zu durchsuchen. Wenn das nach der modernen Suchfunktion klingt, die in jedem Textverarbeitungsprogramm oder Texteditor verfügbar ist, dann haben Sie die Auswirkungen von grep auf die Computerindustrie bereits erlebt.

Weit davon entfernt, nur ein altertümlicher Befehl zu sein, der durch moderne Technologie ersetzt wurde, liegt die wahre Stärke von grep in zwei Aspekten:

  • Grep arbeitet im Terminal und arbeitet mit Datenströmen, sodass Sie es in komplexe Prozesse integrieren können. Sie können nicht nur finden ein Wort in einer Textdatei; Sie können das Wort extrahieren, an einen anderen Befehl senden usw.
  • Grep verwendet reguläre Ausdrücke, um eine flexible Suchfunktion bereitzustellen.

grep lernen Befehl ist einfach, obwohl es etwas Übung erfordert. Dieser Artikel stellt Ihnen einige seiner Funktionen vor, die ich am nützlichsten finde.

[Laden Sie unseren kostenlosen Grep-Spickzettel herunter]

Installation von grep

Wenn Sie Linux verwenden, haben Sie grep bereits installiert.

Unter macOS haben Sie die BSD-Version von grep. Diese unterscheidet sich geringfügig von der GNU-Version, wenn Sie also genau diesem Artikel folgen möchten, installieren Sie GNU grep von einem Projekt wie Homebrew oder MacPorts.

Grundlegendes grep

Die grundlegende grep-Syntax ist immer gleich. Sie geben den grep an Befehlen Sie ein Muster und eine Datei, die Sie durchsuchen möchten. Im Gegenzug gibt es jede Zeile mit einer Übereinstimmung auf Ihrem Terminal aus.

$ grep gnu gpl-3.0.txt
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
<http://www.gnu.org/licenses/>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Standardmäßig ist das grep Beim Befehl wird zwischen Groß- und Kleinschreibung unterschieden, daher unterscheidet sich „gnu“ von „GNU“ oder „Gnu“. Mit --ignore-case können Sie Groß- und Kleinschreibung ignorieren Option.

$ grep --ignore-case gnu gpl-3.0.txt
                    GNU GENERAL PUBLIC LICENSE
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
[...16 more results...]
<http://www.gnu.org/licenses/>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Sie können auch den grep erstellen Befehl gibt alle Zeilen ohne zurück eine Übereinstimmung mithilfe von --invert-match Möglichkeit:

$ grep --invert-match \
--ignore-case gnu gpl-3.0.txt
                      Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
[...648 lines...]
Public License instead of this License.  But first, please read

Rohre

Es ist nützlich, Text in einer Datei finden zu können, aber die wahre Stärke von POSIX ist seine Fähigkeit, Befehle durch „Pipes“ miteinander zu verketten. Ich finde, dass ich grep am besten verwende, wenn ich es mit anderen Werkzeugen wie cut, tr oder curl kombiniere.

Angenommen, ich habe eine Datei, in der einige technische Unterlagen aufgelistet sind, die ich herunterladen möchte. Ich könnte die Datei öffnen und manuell auf jeden Link klicken und dann durch die Firefox-Optionen klicken, um jede Datei auf meiner Festplatte zu speichern, aber das ist viel Zeit und Klicken. Stattdessen könnte ich nach den Links in der Datei suchen und nur drucken die übereinstimmende Zeichenfolge mithilfe von --only-matching Möglichkeit:

$ grep --only-matching http\:\/\/.*pdf example.html
http://example.com/linux_whitepaper.pdf
http://example.com/bsd_whitepaper.pdf
http://example.com/important_security_topic.pdf

Die Ausgabe ist eine Liste von URLs, jede in einer Zeile. Dies ist eine natürliche Anpassung an die Art und Weise, wie Bash Daten verarbeitet. Anstatt die URLs auf meinem Terminal ausgeben zu lassen, kann ich sie einfach in curl leiten :

$ grep --only-matching http\:\/\/.*pdf \
example.html | curl --remote-name

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Dies lädt jede Datei herunter und speichert sie entsprechend ihrem Remote-Dateinamen auf meiner Festplatte.

Mein Suchmuster in diesem Beispiel mag kryptisch erscheinen. Das liegt daran, dass reguläre Ausdrücke verwendet werden, eine Art "Platzhalter"-Sprache, die besonders nützlich ist, wenn Sie eine große Menge Text durchsuchen.

Regulärer Ausdruck

Niemand gibt sich der Illusion hin, dass reguläre Ausdrücke (kurz „regex“) einfach sind. Ich finde jedoch, dass es oft einen schlechteren Ruf hat, als es verdient. Zugegeben, es besteht die Möglichkeit, dass die Leute ein wenig zu schlau werden mit Regex, bis es so unlesbar und so breit ist, dass es sich in sich selbst zusammenfaltet, aber Sie müssen Ihre Regex nicht übertreiben. Hier ist eine kurze Einführung in Regex, wie ich es verwende.

Erstellen Sie zunächst eine Datei mit dem Namen example.txt und geben Sie diesen Text ein:

Albania
Algeria
Canada
0
1
3
11

Das grundlegendste Element von Regex ist das bescheidene . Charakter. Es repräsentiert ein einzelnes Zeichen.

$ grep Can.da example.txt
Canada

Das Muster Can.da Canada wurde erfolgreich zurückgegeben weil der . Zeichen repräsentierte irgendein Eins Zeichen.

Der . Platzhalter können geändert werden, um mehr als ein Zeichen mit diesen Notationen darzustellen:

  • ? stimmt null oder einmal mit dem vorangehenden Element überein
  • * stimmt null oder mehrmals mit dem vorangehenden Element überein
  • + stimmt mindestens einmal mit dem vorangehenden Element überein
  • {4} stimmt viermal (oder eine beliebige Zahl, die Sie in die geschweiften Klammern eingeben) mit dem vorangehenden Element überein

Bewaffnet mit diesem Wissen können Sie Regex auf example.txt üben den ganzen Nachmittag, um zu sehen, welche interessanten Kombinationen Ihnen einfallen. Einige werden nicht funktionieren; andere werden. Das Wichtigste ist, die Ergebnisse zu analysieren, damit Sie verstehen, warum.

Erweiterter regulärer Ausdruck erfordert --extended-regexp oder-E Option.

Beispielsweise gibt dies kein Land zurück:

$ grep -E A.a example.txt

Es schlägt fehl, weil . Charakter kann immer nur mit einem einzigen Charakter übereinstimmen, es sei denn, Sie erhöhen ihn. Verwenden Sie den * Zeichen, können Sie grep mitteilen um ein einzelnes Zeichen mit Null abzugleichen, oder so oft wie nötig, bis es das Ende des Wortes erreicht. Weil Sie die Liste kennen, mit der Sie es zu tun haben, wissen Sie das nullmal ist in diesem Fall nutzlos. Diese Liste enthält definitiv keine dreibuchstabigen Ländernamen. Sie können also stattdessen + verwenden um ein einzelnes Zeichen mindestens einmal und dann so oft wie nötig bis zum Ende des Wortes zu finden:

$ grep -E A.+a example.txt
Albania
Algeria

Sie können eckige Klammern verwenden, um eine Liste von Buchstaben bereitzustellen:

$ grep -E [AC].+a example.txt
Albania
Algeria
Canada

Das funktioniert auch mit Zahlen. Die Ergebnisse könnten Sie überraschen:

$ grep [1-9] example.txt
1
3
11

Sind Sie überrascht, 11 bei einer Suche nach den Ziffern 1 bis 9 zu sehen?

Was passiert, wenn Sie 13 zu Ihrer Liste hinzufügen?

Diese Nummern werden zurückgegeben, weil sie die 1 enthalten, die in der Liste der abzugleichenden Ziffern enthalten ist.

Wie Sie sehen können, ist Regex so etwas wie ein Puzzle, aber durch Experimentieren und Üben können Sie sich damit vertraut machen und es verwenden, um die Art und Weise zu verbessern, wie Sie Ihre Daten durchsuchen.

Cheatsheet herunterladen

Das grep Der Befehl hat weit mehr Optionen, als ich in diesem Artikel gezeigt habe. Es gibt Optionen, um Ergebnisse besser zu formatieren, Dateien und Zeilennummern aufzulisten, die Übereinstimmungen enthalten, Kontext für Ergebnisse bereitzustellen, indem die Zeilen um eine Übereinstimmung gedruckt werden, und vieles mehr. Wenn Sie grep lernen oder es einfach oft verwenden und auf die Suche in seinen info zurückgreifen Seiten, tust du dir selbst einen Gefallen, indem du unseren Spickzettel dafür herunterlädst. Der Spickzettel verwendet kurze Optionen (-v statt --invert-matching , zum Beispiel), um Sie mit der gebräuchlichen grep-Kurzschrift vertraut zu machen. Es enthält auch einen Regex-Abschnitt, der Ihnen hilft, sich an die gängigsten Regex-Codes zu erinnern. Laden Sie noch heute den grep-Spickzettel herunter!


Linux
  1. So verwenden Sie den Verlaufsbefehl unter Linux

  2. So verwenden Sie den Su-Befehl unter Linux

  3. So verwenden Sie den id-Befehl unter Linux

  4. Verwenden Sie den Linux-Befehl grep

  5. So verwenden Sie den Befehl „screen“ unter Linux

So verwenden Sie den fd-Befehl auf einem Linux-System

Wie verwende ich den wget-Befehl unter Linux?

Wie verwende ich den xargs-Befehl unter Linux?

Verwendung des grep-Befehls unter Linux

So verwenden Sie den RPM-Befehl unter Linux

So verwenden Sie den which-Befehl in Linux