Der Name Grep stammt aus dem Befehl ED (und VIM) "G/RE/P", was bedeutet, dass die Ausgabe global nach einem bestimmten regulären Ausdruck und Druck (Anzeige) gesucht wird.
Regulär Ausdrücke
Die Dienstprogramme ermöglichen es dem Benutzer, Textdateien nach Zeilen zu durchsuchen, die einem regulären Ausdruck entsprechen (Regexp). Ein regulärer Ausdruck ist eine Suchzeichenfolge aus Text und einer oder mehreren von 11 Sonderzeichen. Ein einfaches Beispiel ist der Start einer Linie.
Beispieldatei
Die grundlegende Form von Grep Kann verwendet werden, um einfachen Text in einer bestimmten Datei oder Dateien zu finden. Um die Beispiele auszuprobieren, erstellen Sie zuerst die Beispieldatei.
Verwenden Sie einen Editor wie Nano oder VIM, um den folgenden Text in eine Datei mit dem Namen zu kopieren meine Datei.
xyz
xyzde
Exyzd
Dexyz
D?gxyz
xxz
xzz
x \ z
x*z
xz
x z
Xyz
Xyyz
xyz
xyyz
xyyyz
xyyyyz
Obwohl Sie die Beispiele im Text kopieren und einfügen können (beachten Sie, dass Doppelzitate möglicherweise nicht ordnungsgemäß kopiert werden) müssen Befehle eingegeben werden, um sie ordnungsgemäß zu lernen.
Bevor Sie die Beispiele ausprobieren, sehen Sie sich die Beispieldatei an:
Katzenmyfilexyz
Einfache Suche
Um den Text 'xyz' in der Datei zu finden, führen Sie Folgendes aus:
Grep xyz myfilexyz
Optionen
Gemeinsame Optionen mit dem verwendeten Grep Befehl enthalten:
Zum Beispiel:
grep -i xyz myfilexyz
# Text unabhängig vom Fall finden
grep -ic xyz myfile7
# Zeilen mit Text zählen
grep -in xyz myfile1: xyz
# Zeilennummern anzeigen
Erstellen Sie mehrere Dateien
Erstellen Sie vor dem Versuch, mehrere Dateien zu durchsuchen, zuerst mehrere neue Dateien:
echo xyz> myfile1xyz
Cat MyFile1
echo -e 'xyz \ nxzz \ nxyz'> myFile2xyz
Cat MyFile2
echo -e 'xxx \ nyyy'> myfile3xxx
Cat MyFile3
Suchen Sie mehrere Dateien
So durchsuchen Sie mehrere Dateien mithilfe von Dateinamen oder einer Wildcard -Eingabetaste:
grep -ic xyz myfile myfile1 myfile2 myfile3MyFile: 7
# Übereinstimmung Dateinamen, beginnend mit 'My' 'myfile: 1: xyz
grep -in xyz mein**
Übung i
Hinweis: Verwenden Sie WC -l /etc /passwd
Übungslösungen finden Sie am Ende dieses Artikels.
Verwenden regelmäßiger Ausdrücke
Der Befehl Grep Kann auch mit regulären Ausdrücken verwendet werden, indem ein oder mehrere elf Sonderzeichen oder Symbole verwendet werden, um die Suche zu verfeinern. Ein regulärer Ausdruck ist eine Zeichenzeichenfolge, die Sonderzeichen enthält, um Muster in Dienstprogramme wie z Grep, Vim Und sed. Beachten Sie, dass die Saiten möglicherweise in Zitaten eingeschlossen sein müssen.
Zu den verfügbaren Sonderzeichen gehören:
^ | Start einer Linie |
$ | Ende einer Linie |
. | Jedes Zeichen (außer \ n Newline) |
* | 0 oder mehr des vorherigen Ausdrucks |
\ | Ein Symbol macht es zu einem wörtlichen Charakter |
Beachten Sie, dass das *, das in der Befehlszeile verwendet werden kann, um eine beliebige Anzahl von Zeichen zu entsprechen, einschließlich keiner, ist nicht genauso genutzt hier hier.
Beachten Sie auch die Verwendung von Zitaten in den folgenden Beispielen.
Beispiele
So finden Sie alle Zeilen, die mit dem Text mit dem ^ Charakter beginnen:
grep '^xyz' myfile
Um alle Zeilen zu finden, die mit dem Text mit dem $ Charakter enden:
grep 'xyz $' myfile
Um Zeilen zu finden, die eine Zeichenfolge verwenden, die sowohl mit ^ als auch $ $ Zeichen verwendet werden:
grep '^xyz $' myfile
Leitungen mit dem finden . zu jedem Charakter entsprechen:
grep '^x.z 'myfile
Um Zeilen zu finden, die mit dem * 0 oder mehr des vorherigen Ausdrucks übereinstimmen, übereinstimmt:
grep '^xy*z' myfile
Leitungen mit verwenden .* Zu 0 oder mehr von jedem Charakter passt:
grep '^x.*Z 'myfile
Leitungen mit dem finden \ um dem * Charakter zu entkommen:
grep '^x \*z' myfile
Um den \ Character -Gebrauch zu finden:
grep '\\' myfile
Ausdruck Grep - eGrep
Der Grep Der Befehl unterstützt nur eine Teilmenge der verfügbaren regulären Ausdrücke. Der Befehl jedoch EGREP:
Beachten Sie, dass die Ausdrücke in ein Paar Zitate eingeschlossen sein müssen.
Um nach mehr als einem zu suchen Regex Die Egrep Der Befehl kann über mehrere Zeilen geschrieben werden. Dies kann jedoch auch mit diesen Sonderzeichen erfolgen:
| | Wechsel, entweder die eine oder andere |
(…) | Logische Gruppierung eines Teils eines Ausdrucks |
eGrep '(^root |^uucp |^mail)' /etc /passwd
Dies extrahiert die Zeilen, die mit Root, UUCP oder Mail aus der Datei beginnen, die | Symbol bedeutet eine der Optionen.
Der folgende Befehl wird nicht Arbeiten, obwohl keine Nachricht angezeigt wird, da die Basic Grep Der Befehl unterstützt nicht alle regulären Ausdrücke:
grep '(^root |^uucp |^mail)' /etc /passwd
Auf den meisten Linux -Systemen der Befehl jedoch grep -e ist dasselbe wie die Verwendung Egrep:
grep -e '(^root |^uucp |^mail)' /etc /passwd
Verwenden von Filtern
Rohrleitungen ist der Prozess des Sendens der Ausgabe eines Befehls als Eingabe in einen anderen Befehl und ist eines der leistungsstärksten Linux -Tools verfügbar.
Befehle, die in einer Pipeline erscheinen.
Im folgenden Beispiel Standardausgabe von ls -l wird als Standardeingabe an die übergeben Grep Befehl. Ausgabe aus dem Grep Der Befehl wird dann als Eingabe an die übergeben mehr Befehl.
Dadurch werden nur Verzeichnisse in angezeigt /usw:
ls -l /etc | grep '^d' | mehr
Die folgenden Befehle sind Beispiele für die Verwendung von Filtern:
PS -f | Grep Cron
wer | grep kdm
Beispieldatei
Erstellen Sie zuerst die folgende Beispieldatei, um die Überprüfungsübung auszuprobieren.
Verwenden Sie einen Editor wie Nano oder VIM, um den folgenden Text in eine Datei mit dem Namen zu kopieren Menschen:
Persönlich j.Smith 25000
Persönlich e.Smith 25400
Training a.Brown 27500
Ausbildung c.Browen 23400
(Admin) r.Bron 30500
Goodsout t.Smyth 30000
Persönlich f.Jones 25000
Training* c.Evans 25500
Wareout w.Papst 30400
Erdgeschoss t.Smythe 30500
Persönlich j.Maler 33000
Übung II
Übungslösungen finden Sie am Ende dieses Artikels.
Regelmäßigere Ausdrücke
Ein regelmäßiger Ausdruck kann als Platzhalter auf Steroiden angesehen werden.
Es gibt elf Zeichen mit besonderen Bedeutungen: die Eröffnungs- und Schlussquadratklammern [], den Backslash \, das Pfarrer, das Dollar Zeichen $, der Zeitraum oder der Punkt ., das vertikale Balken- oder Rohrsymbol |, das Fragezeichen ?, Das Sternchen oder Stern *, das Pluszeichen + und die Öffnung und Schließung der runden Klammer . Diese Sonderzeichen werden auch oft Metacharacter genannt.
Hier sind die vollständigen Sonderzeichen:
^ | Start einer Linie |
$ | Ende einer Linie |
. | Jedes Zeichen (außer \ n Newline) |
* | 0 oder mehr des vorherigen Ausdrucks |
| | Wechsel, entweder die eine oder andere |
[…] | Explizite Satz von Charakteren, die übereinstimmen, |
+ | 1 oder mehr des vorherigen Ausdrucks |
? | 0 oder 1 des vorherigen Ausdrucks |
\ | Ein Symbol macht es zu einem wörtlichen Charakter |
… | Explizite Quantifizierernotation |
(…) | Logische Gruppierung eines Teils eines Ausdrucks |
Die Standardversion von Grep hat nur begrenzte regelmäßige Ausdrucksunterstützung. Um alle folgenden Beispiele zu funktionieren, verwenden Sie die Verwendung Egrep stattdessen oder grep -e.
Leitungen mit dem finden | zu einem beiden Ausdruck zu entsprechen:
eGrep 'xxz | xzz' myfile
Zeilen mit | finden So verwenden Sie den Ausdruck in einer Zeichenfolge auch ():):
eGrep '^x (yz | yz)' myfile
Um Zeilen zu finden, die [] mit [] zu einem beliebigen Charakter übereinstimmen:
eGrep '^x [yy] z' myfile
Um Zeilen zu finden, die [] mit [] nicht übereinstimmen, um ein Zeichen zu übereinstimmen:
eGrep '^x [^yy] z' myfile
Um Zeilen zu finden, die mit dem * 0 oder mehr des vorherigen Ausdrucks übereinstimmen, übereinstimmt:
eGrep '^xy*z' myfile
Um Linien zu finden, die das + mit 1 oder mehr des vorherigen Ausdrucks übereinstimmen:
eGrep '^xy+z' myfile
Leitungen mit dem finden ? mit 0 oder 1 des vorherigen Ausdrucks übereinstimmen:
Egrep '^xy?z 'myfile
Übung III
Mehr Beispiele
Leitungen mit verwenden . und *, um einen Satz von Zeichen zu entsprechen:
Egrep '^xy.*Z 'myfile
Um Zeilen mit zu finden, um die N -Anzahl von Zeichen zu entsprechen:
eGrep '^xy 3 z' myfile
eGrep '^xy 4 z' myfile
Um Zeilen mit zu finden, um n oder mehrmals übereinzustimmen:
eGrep '^xy 3, z' myfile
Um Zeilen mit zu finden, die n -mal, aber nicht mehr als M -Zeiten übereinstimmen:
eGrep '^xy 2,3 z' myfile
Abschluss
In diesem Tutorial haben wir uns zum ersten Mal angesehen Grep In seiner einfachen Form, um Text in einer Datei oder in mehreren Dateien zu finden. Wir haben dann den Text kombiniert, nach dem sie mit einfachen regulären Ausdrücken und dann komplexere gesucht werden sollen Egrep.
Nächste Schritte
Ich hoffe, Sie werden das hier gewonnene Wissen gut genutzt. Ausprobieren Grep Befehle über Ihre eigenen Daten und erinnern sich, dass regelmäßige Ausdrücke, wie hier beschrieben beschrieben vi, sed Und awk!
Übungslösungen
Übung i
Zählen Sie zuerst, wie viele Zeilen in der Datei sind /etc/passwd.
WC -l /etc /passwd
Finden Sie nun alle Vorkommen des Textes var in der Datei /etc /passwd.
grep var /etc /passwd
Finden Sie, wie viele Zeilen in der Datei den Text enthalten var
grep -c var /etc /passwd
Finden Sie heraus, wie viele Zeilen den Text nicht enthalten var.
grep -cv var /etc /passwd
Finden Sie den Eintrag für Ihr Login in der /etc/passwd Datei
Grep KDM /etc /passwd
Übung II
Zeigen Sie die Datei an Menschen und untersuchen seinen Inhalt.
Katzenmenschen
Finden Sie alle Zeilen, die die Zeichenfolge enthalten Schmied in der Datei Menschen.
Grep 'Smith' Menschen
Erstellen Sie eine neue Datei, Npeopel, enthält alle Zeilen, die mit der Zeichenfolge beginnen persönlich im Menschen Datei
grep '^persönliche' people> npeople
Bestätigen Sie den Inhalt der Datei Npeopel Durch Auflisten der Datei.
Katzen -Npeopel
Gehen Sie nun alle Zeilen an, bei denen der Text mit der Zeichenfolge endet 500 in der Datei Menschen zur Datei Npeopel.
grep '500 $' people >> npeople
Bestätigen Sie erneut den Inhalt der Datei Npeopel Durch Auflisten der Datei.
Katzen -Npeopel
Suchen Sie die IP -Adresse des Servers, der in der Datei gespeichert ist /etc/hosts.
Grep $ (Hostname) /etc /hosts
Verwenden Egrep aus dem extrahieren /etc/passwd Dateikontozeilen enthalten LP oder Ihre eigene Benutzer -ID.
EGREP '(LP | KDM :)' /etc /passwd
Übung III
Finden Sie alle Zeilen mit den Namen Evans oder Maler in der Datei Menschen.
Egrep 'Evans | Maler' Menschen
Finden Sie alle Zeilen mit den Namen Schmied, Smyth oder Smythe in der Datei Menschen.
eGrep 'sm (i | y) die?' Menschen
Finden Sie alle Zeilen mit den Namen Braun, Browen oder Bron in der Datei personen.
Egrep 'Stirn?e?n 'Leute
Finden Sie die Linie mit der Zeichenfolge (Administrator), einschließlich der Klammern in der Datei Menschen.
$ eGrep '\ (admin \)' Menschen
Finden Sie die Linie, die den Charakter enthält * in der Datei personen.
eGrep '\*' Menschen
Kombinieren Sie 5 und 6 oben, um beide Ausdrücke zu finden.
eGrep '\ (admin \) | \*' Menschen