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
[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
[
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
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
Beispiel:
(5)--line-buffered Puffermodus aktivieren
[root@localhost ~]# grep -lr baidu . ./file.txt ./test/test.txt
[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
[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
Wenn wir das Testverzeichnis zu diesem Zeitpunkt nicht einschließen möchten
[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
[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:
-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