Heim  >  Artikel  >  php教程  >  Detaillierte Erläuterung der grep-Verwendung grep und regulärer Ausdrücke

Detaillierte Erläuterung der grep-Verwendung grep und regulärer Ausdrücke

高洛峰
高洛峰Original
2016-12-13 14:28:031202Durchsuche

Regulärer Ausdruck ist nur eine Darstellung. Solange das Tool diese Darstellung unterstützt, kann das Tool reguläre Ausdruckszeichenfolgen verarbeiten. vim, grep, awk und sed unterstützen alle reguläre Ausdrücke, und gerade weil sie reguläre Ausdrücke unterstützen, sind sie in dem Unternehmen, in dem ich zuvor gearbeitet habe, leistungsstark, da das Unternehmen eine webbasierte Service-Website (Nginx) war Ausdrücke waren Die Nachfrage ist relativ groß, daher habe ich auch einige Zeit damit verbracht, reguläre Ausdrücke zu studieren, und ich möchte sie mit Ihnen teilen:

1 Grundlegende reguläre Ausdrücke
Das Grep-Tool wurde bereits eingeführt.
grep -[acinv] 'Inhaltszeichenfolge durchsuchen' Dateiname
-a In Textdatei suchen
-c Anzahl der gefundenen übereinstimmenden Zeilen zählen
-i Groß- und Kleinschreibung ignorieren
-n Übrigens Ausgabezeilennummer
-v umgekehrte Auswahl, d. h. Zeilen ohne Suchzeichenfolge finden
wobei die Suchzeichenfolge ein regulärer Ausdruck sein kann

1
Suchen Sie nach Zeilen mit der und Ausgabezeile! number
$grep -n 'the' regular_express.txt
Nach Zeilen ohne suchen und die Zeilennummer ausgeben
$grep -nv 'the' regular_express.txt

2 Verwenden Sie [ ] Suchsatzzeichen
[] steht für eines der Zeichen, zum Beispiel steht [ade] für a oder d oder e
woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt
8:Ich kann den Test nicht beenden
9:Oh! Die Suppe schmeckt gut

Sie können das ^-Symbol als Präfix in [] verwenden, um die Zeichen in [] extern anzuzeigen Charaktere.
Suchen Sie beispielsweise nach der Zeile, die eine Zeichenfolge ohne g vor oo enthält. Verwenden Sie „[^g]oo“ als Suchzeichenfolge
woody@xiaoc:~/tmp$ grep -n '[^g]oo ' regular_express .txt
2:Apfel ist mein Lieblingsessen
3:Fußballspiel ist nicht nur die Verwendung von Füßen
18:Google ist das beste Suchwerkzeug
19:gooooogle ja.

[] kann durch einen Bereich dargestellt werden. Beispielsweise steht [a-z] für Kleinbuchstaben, [0-9] für Zahlen von 0 bis 9 und [A-Z] für Großbuchstaben. [a-zA-Z0-9] steht für alle Zahlen und englischen Zeichen. Natürlich können Sie ^ auch verwenden, um Zeichen auszuschließen.
Suche nach Zeilen mit Zahlen
woody@xiaoc:~/tmp$ grep -n '[0-9]' regular_express.txt
5: Dieses Kleid kostet jedoch etwa 3183 Dollar
15:Du bist der Beste, du bist die Nr.1.

Das erste und letzte Zeichen der Zeile ^ $ ^ stellt den Anfang der Zeile dar, $ stellt das Ende der Zeile dar (nicht a Zeichen, sondern eine Position), dann bedeutet „^$“ eine Leerzeile, da am Anfang und Ende der Zeile nur
steht.
Die Bedeutung von ^ unterscheidet sich hier von der in []. Das bedeutet, dass die Zeichenfolge nach ^ am Anfang der Zeile steht.
Suchen Sie beispielsweise nach der Zeile am Anfang
woody@xiaoc:~/tmp$ grep -n '^the' regular_express.txt
12: Das Symbol „*“ wird als Stern
Suche nach Zeilen, die mit Kleinbuchstaben beginnen
woody@xiaoc:~/tmp$ grep -n '^[a-z]' regular_express.txt
2:Apfel ist mein Lieblingsessen
4 :Dieses Kleid passt mir nicht
10:Motorrad ist günstiger als Auto
12:Das Symbol „*“ wird als Stern dargestellt
18:Google ist das beste Suchwort
19 :gooooogle ja!
Los geht's!
woody@xiaoc:~/tmp$

Suche nach Zeilen, die nicht mit englischen Buchstaben beginnen @xiaoc:~/tmp $ grep -n '^[^a-zA-Z]' regular_express.txt
1:"Open Source" ist ein guter Mechanismus zum Entwickeln von Programmen
21:#Ich bin VBird
woody@xiaoc :~/tmp$

$ bedeutet, dass die Zeichenfolge davor am Ende einer Zeile steht, z. B. „.“ bedeutet „Am Ende einer Zeile“. Zeilen mit . am Ende
woody@xiaoc:~ /tmp$ grep -n '.$' regular_express.txt // ist ein spezielles Symbol für reguläre Ausdrücke, also maskieren Sie es
1: „Open Source“ ist ein guter Mechanismus, um Programme zu entwickeln
2:Apfel ist mein Lieblingsessen
3:Fußballspiel ist nicht nur für die Füße geeignet
5: Dieses Kleid kostet jedoch etwa 3183 Dollar.
6:GNU ist Freiluft, nicht Freibier Zeichen wird zur neuen Zeile hinzugefügt. Daher wird das letzte Zeichen ausgeblendet ^M. Achten Sie besonders darauf, wenn Sie den Text unter Windows verarbeiten
!
Sie können cat dos_file | tr -d 'r' > verwenden, um das ^M-Symbol zu löschen. ^M==r

Dann bedeutet '^$', dass nur die Leerzeilen am Anfang und Ende der Zeile gezogen werden!
Nach leeren Zeilen suchen
woody@xiaoc:~/tmp$ grep -n '^$' regular_express.txt
22:
23:
woody@xiaoc:~/tmp$

Suche nach nicht leeren Zeilen
woody@xiaoc:~/tmp$ grep -vn '^$' regular_express.txt
1:"Open Source" ist ein guter Mechanismus zum Entwickeln von Programmen
2 :Apfel ist mein Lieblingsessen
3:Beim Fußballspiel geht es nicht nur um die Füße
4:Dieses Kleid passt mir nicht
.......

Beliebiges Zeichen Mit wiederholten Zeichen*

In Bash stellt * ein Platzhalterzeichen dar, das zur Darstellung einer beliebigen Anzahl von Zeichen verwendet wird. In regulären Ausdrücken hat es jedoch eine andere Bedeutung. * stellt 0 oder mehr eines bestimmten Zeichens dar.
oo* bedeutet beispielsweise, dass das erste o vorhanden sein muss und das zweite o einen, mehrere oder keinen haben kann, sodass es mindestens einen o-Punkt darstellt , die vorhanden sein muss. g??d kann durch 'g..d' dargestellt werden. gut, gxxd, gabd ... sind alle konsistent.

woody@xiaoc:~/tmp$ grep -n 'g..d' regular_express.txt
1:"Open Source" ist ein guter Mechanismus, um Programme zu entwickeln
9:Oh! Die Suppe schmeckt gut!
16:Die Welt ist die gleiche mit „froh“
woody@xiaoc:~/tmp$

Suche nach Zeichenfolgen mit mehr als zwei O’s
woody@. xiaoc:~/tmp$ grep -n 'ooo*' regular_express.txt //Die ersten beiden o müssen existieren, das dritte o darf nicht existieren, oder es können mehrere sein.
1:„Open Source“ ist ein guter Mechanismus, um Programme zu entwickeln
2:Apfel ist mein Lieblingsessen
3:Beim Fußballspiel geht es nicht nur um die Füße schmeckt gut!
18:Google ist das beste Suchwerkzeug
19:gooooogle ja!

Suchen Sie nach einer Zeichenfolge, die mit g beginnt und endet und in der Mitte mindestens ein o enthält , das heißt gog, goog ....gooog...etc.
woody@xiaoc:~/tmp$ grep -n 'goo*g' regular_express.txt
18:google ist das beste Tool für Suchschlüsselwort.
19: gooooooogle ja!

Suche nach den Zeilen, die mit g beginnen und enden
woody@xiaoc:~/tmp$ grep -n 'g.*g' regular_express.txt / / .* bedeutet 0 oder eine beliebige Anzahl von Zeichen
1:„Open Source“ ist ein guter Mechanismus zum Entwickeln von Programmen
14:Die GD-Software ist eine Bibliothek zum Entwerfen von Programmen Beste Tools für die Suche nach Schlüsselwörtern.
20:Los geht's! nur 0 oder mehr begrenzen Wenn Sie die Anzahl der wiederholten Zeichen gezielt begrenzen möchten, verwenden Sie {range}. Der Bereich ist eine Zahl, getrennt durch 2,5, um 2~5 darzustellen,
2 steht für 2, 2, stellt 2 bis mehr dar
Beachten Sie, dass { } in SHELL eine besondere Bedeutung hat und daher als verwendet wird Reguläre Ausdrücke müssen bei Verwendung mit Escapezeichen versehen werden.

Suchen Sie nach Zeilen, die eine Zeichenfolge mit zwei o enthalten.
woody@xiaoc:~/tmp$ grep -n 'o{2}' regular_express.txt
1:„Open Source“ ist ein guter Mechanismus zum Entwickeln von Programmen
2:Apple ist mein Lieblingsessen .
3:Beim Fußballspiel geht es nicht nur um die Füße
18:Google ist das beste Suchwort

Suchen Sie nach Zeilen, in denen auf g 2–5 o’s folgen, gefolgt von einer Zeichenfolge aus g.
woody@xiaoc:~/tmp$ grep -n 'go{2,5}g' regular_express.txt
18:google ist das beste Tool für die Suche nach Schlüsselwörtern Zeilen mit g, gefolgt von zwei oder mehr o, gefolgt von g. .
woody@xiaoc:~/tmp$ grep -n 'go{2,}g' regular_express.txt
18:google ist das beste Tool für die Suche nach Schlüsselwörtern
19:goooooogle ja!

Beachten Sie, dass das ^ in [] keine besondere Bedeutung ausdrückt und nach dem Inhalt in [] platziert werden kann.
'[^a-z.!^ -]' bedeutet keine Kleinbuchstaben, nein!, keine Leerzeichen, keine Zeichenfolgen. Beachten Sie, dass in [] ein kleines Leerzeichen enthalten ist.

Außerdem ist die umgekehrte Auswahl in der Shell [!range] und im regulären Ausdruck [^range]


2 Erweiterter regulärer Ausdruck

Erweiterter regulärer Ausdruck Ausdruck Es fügt dem grundlegenden regulären Ausdruck mehrere spezielle Komponenten hinzu.
Es macht bestimmte Vorgänge komfortabler.
Wenn wir beispielsweise Leerzeilen und Zeilen, die mit # beginnen, entfernen möchten, würden wir Folgendes verwenden:
woody@xiaoc:~/tmp$ grep -v '^$' regular_express.txt |. ^#'
„Open Source“ ist ein guter Mechanismus, um Programme zu entwickeln
Fußballspiel ist nicht nur für mich geeignet
. ...........

Allerdings ist es viel bequemer, egrep zu verwenden, das erweiterte reguläre Ausdrücke und das erweiterte Sonderzeichen | unterstützt.
Beachten Sie, dass grep nur grundlegende Ausdrücke unterstützt, während egrep erweiterte Ausdrücke unterstützt. Tatsächlich ist egrep nur ein Alias ​​von grep -E. Daher unterstützt grep -E erweiterte reguläre Ausdrücke.
Dann:
woody@xiaoc:~/tmp$ egrep -v '^$|^#' regular_express.txt
„Open Source“ ist ein guter Mechanismus zum Entwickeln von Programmen
Apple ist mein Lieblingsessen.
Beim Fußballspiel geht es nicht nur um die Füße
Dieses Kleid passt mir nicht
......... .......
Hier|. stellt die Beziehung von OR dar. Das heißt, eine Zeichenfolge, die ^$ oder ^# erfüllt.

Hier sind mehrere erweiterte Sonderzeichen:
+, das eine ähnliche Funktion wie * hat und ein oder mehrere wiederholte Zeichen darstellt.
? hat eine ähnliche Wirkung wie * und steht für 0 oder ein Zeichen.
| stellt eine Beziehung dar, zum Beispiel stellt 'gd|good|dog' eine Zeichenfolge dar, die gd, good oder dog
() enthält und einen Teil des Inhalts zu einer Einheitengruppe zusammenfasst. Wenn Sie beispielsweise nach „froh“ oder „good“ suchen möchten, können Sie „g(la|oo)d“
() verwenden. Der Vorteil ist, dass Sie + ? * usw. für Gruppen verwenden können.
Wenn Sie beispielsweise nach Zeichenfolgen suchen möchten, die mit A und C beginnen und enden und mindestens ein (xyz) in der Mitte haben, können Sie Folgendes tun: „A(xyz)+C“

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Linux-Pipeline-Befehl grepNächster Artikel:Linux-Pipeline-Befehl grep