Heim  >  Artikel  >  php教程  >  Detaillierte Erläuterung der klassischen Verwendungsszenarien von Grep command-9

Detaillierte Erläuterung der klassischen Verwendungsszenarien von Grep command-9

高洛峰
高洛峰Original
2016-12-13 14:54:101663Durchsuche

Grep
steht für Global Regular Expression Print, was bedeutet, dass globaler regulärer Ausdruck
ein leistungsstarkes Textsuchtool ist, das reguläre Matching-
1-Befehlsformate
grep [Optionen]-Dateien
verwendet

2. Hauptparameter
-c: Nur die Anzahl der übereinstimmenden Zeilen ausgeben
-i: Groß- und Kleinschreibung wird nicht berücksichtigt
-n: Passende Navigations- und Zeilennummern anzeigen
-l: Bei der Abfrage mehrerer Dateien werden nur Dateinamen ausgegeben, die übereinstimmende Zeichen enthalten
-v: umgekehrte Übereinstimmung, d. h. nicht übereinstimmende Zeilen werden angezeigt
-h: Dateinamen sind bei der Abfrage nicht anwendbar
-s: nicht Fehlermeldung anzeigen


3. Teil des regulären Ausdrucks
Antonymzeichen: wie „““ bedeutet Übereinstimmung mit „“
^$ Anfang und Ende
[] Einzelzeichen , [ A]
[ - ] entspricht einem Bereich, [0-9a-zA-Z] entspricht allen Zahlen und Buchstaben
* das vorherige Zeichen erscheint 0 oder mehrmals
+ das vorherige Zeichen erscheint einmal oder Mehrmals
. Beliebiges Zeichen

4. Klassische Szene

Sofern Sie nicht genau auf Groß- und Kleinschreibung achten möchten, fügen Sie bitte -i hinzu, um die Groß- und Kleinschreibung zu ignorieren

(1) Kombinieren Sie den Suchbefehl und die Pipeline
Sie haben Dateien in mehreren Formaten in einem Musikordner und möchten nur die MP3-Datei des Künstlers Jay finden, die keine gemischten Audiotitel enthält
[root@localhost ~]#find . -name ".mp3" |. grep -i jay |. Analyse: 1) Verwenden Sie find -name, um alle MP3-Dateien aufzulisten und zu grep weiterzuleiten 2) Verwenden Sie grep -i, um Zeilen zu finden, die jay enthalten
3) Verwenden Sie grep -vi, um Zeilen zu finden, die kein Remix enthalten


(2)-A -B -C
Viele Manchmal geht es uns nicht um übereinstimmende Zeilen, sondern um den Kontext übereinstimmender Zeilen. Zu diesem Zeitpunkt ist -A -B -C nützlich
-A n n Zeilen danach, A wird als (Nachher) gespeichert
-B n n Zeilen davor, B wird als (Vorher)
-C n davor gespeichert n Zeilen, die nächsten n Zeilen, C-Speicher ist (Mitte)
Beispiel

(3) Verwenden Sie -c, um die Zahl zu zählen
[root@localhost ~]# ifconfig | grep -A 2 "Link encap"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F3:38:15  
          inet addr:192.168.91.129  Bcast:192.168.91.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef3:3815/64 Scope:Link
--
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host


[root@localhost ~]#  ifconfig | grep -C 2 "lo"
          Interrupt:67 Base address:0x2024 


lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
Sie haben eine große Datei zur Hand Enthält URLs wie www.baidu.com, tieba.baidu.com usw. Möchten Sie wissen, wie viele URLs zu Baidu gehören

[

(4) -r Unterverzeichnisse rekursiv durchsuchen
root@localhost ~]# grep -c "*baidu.com*" filename
例子
[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -cn ".*baidu.com.*" file.txt 
3
Dateien finden, die übereinstimmende Zeichen im aktuellen Verzeichnis und seinen Unterverzeichnissen enthalten

Suchen Sie nach Unterverzeichnissen und geben Sie die Zeilennummer nach dem Abgleich aus. Der Punkt hier zeigt das aktuelle Verzeichnis an


[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .

Beispiel:

Nach Unterverzeichnissen suchen und Dateinamen nur nach Übereinstimmung ausgeben
[root@localhost ~]# grep -nr baidu .
./file.txt:8:www.baidu.com
./file.txt:9:tieba.baidu.com
./file.txt:11:www.baidu.com/search/index
./test/test.txt:1:http://www.baidu.com
[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .



Beispiel:

(5)--line-buffered Puffermodus aktivieren
[root@localhost ~]# grep -lr baidu .
./file.txt
./test/test.txt
Sie haben eine dynamische Datei, die am Ende der Datei ständig Informationen hinzufügt, und Sie möchten Zeilen mit bestimmten Informationen ausgeben. Das heißt, kontinuierlich einen dynamischen Stream grep



[root@localhost ~]#tail -f file | ps Finden Sie den Prozess


Hier sehen wir, dass der Befehl, den wir mit grep init ausgeführt haben, auch aufgelistet ist
Wenn wir diese Zeile nicht möchten, können wir den Befehl wie folgt ändern

[root@localhost ~]# ps aux | grep init
root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                             
root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"
root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
root      4956  0.0  0.1   3920   680 pts/1    R+   23:27   0:00 grep init
( 7) Suchen Sie nach einem Verzeichnis, das kein bestimmtes Verzeichnis enthält

[root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

[root@localhost ~]# ps aux | grep [i]nit
root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                             
root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"
root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
Beispiel



Wenn wir das Testverzeichnis zu diesem Zeitpunkt nicht einschließen möchten

Wenn ein Fehler gemeldet wird
[root@localhost ~]# ls
anaconda-ks.cfg  Desktop  file.txt  find.result  install.log  install.log.syslog  test
[root@localhost ~]# grep -r baidu .
./file.txt:www.baidu.com
./file.txt:tieba.baidu.com
./file.txt:www.baidu.com/search/index
./test/test.txt:http://www.baidu.com

es bedeutet, dass die Version zu alt ist, aktualisieren Sie sie und es wird in Ordnung sein
[root@localhost ~]# grep -R --exclude-dir=text "baidu" .
./file.txt:www.baidu.com
./file.txt:tieba.baidu.com
./file.txt:www.baidu.com/search/index

grep: unrecognized option `--exclude-dir=test'

(8) Finden Sie die IP-Adresse

Das -o und - Hier werden P-Befehle verwendet

Wir überprüfen durch man grep
-o, --only-matching:

Zeigt nur den Teil einer übereinstimmenden Zeile an, der mit PATTERN übereinstimmt.

-P, --perl- regexp:
Interpretieren Sie PATTERN als regulären Perl-Ausdruck.
Das heißt, -o zeigt nur Übereinstimmungen in der übereinstimmenden Zeile an. Der Teil des regulären Ausdrucks
-P, als regulärer Perl-Übereinstimmung


(9) Finden Sie das Postfach

[root@localhost ~]# grep -oP "[a- zA-Z0-9_-]+@[a-zA-Z0-9_-] +(.[a-zA-Z0-9_-]+)+" file.txt

[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt
192.168.0.1
162.12.0.123

Beispiel


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:Leistungsstarker grep-BefehlNächster Artikel:Leistungsstarker grep-Befehl