Es ist oft notwendig, Text oder Ausgabeinhalte unter Linux zu filtern. Der am häufigsten verwendete Filterbefehl ist grep
grep [OPTIONS] PATTERN [FILE...]
grep ruft jede Eingabezeile Zeile für Zeile ab, wenn die Eingabezeile das Muster PATTERN enthält , die Ausgabe dieser Zeile. Das MUSTER hier ist ein regulärer Ausdruck (siehe vorherigen Artikel, in diesem Artikel wird grep als Beispiel verwendet).
Geben Sie die Zeile mit root in der Datei /etc/passwd aus:
[root@centos7 temp]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
oder holen Sie sie aus der Standardeingabe:
[root@centos7 temp]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
Was zu beachten ist ist: wenn grep Wenn die Eingabe sowohl aus Dateien als auch aus der Standardeingabe stammt, ignoriert grep den Inhalt der Standardeingabe und verarbeitet ihn nicht, es sei denn, das Symbol - wird zur Darstellung der Standardeingabe verwendet:
[root@centos7 temp]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
Zu diesem Zeitpunkt zeigt grep an, welche Ergebnisse aus welchen Dateien aus der Standardeingabe stammen.
Geben Sie die mit root beginnenden Zeilen in der Datei /etc/passwd und der Datei /etc/group aus:
[root@centos7 temp]# cat /etc/passwd | grep root /etc/passwd - /etc/passwd:root:x:0:0:root:/root:/bin/bash /etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin (标准输入):root:x:0:0:root:/root:/bin/bash (标准输入):operator:x:11:0:operator:/root:/sbin/nologin
Zu diesem Zeitpunkt zeigt grep an, welche Ergebnisse aus der Datei und stammen die aus der Standardeingabe stammen.
Geben Sie die Zeilen aus, die mit root beginnen, in der Datei /etc/passwd und der Datei /etc/group:
[root@centos7 temp]# grep "^root" /etc/passwd /etc/group /etc/passwd:root:x:0:0:root:/root:/bin/bash /etc/group:root:x:0:
Geben Sie die Zeilen aus, die mit /bin/bash enden, in der Datei /etc /passwd:
[root@centos7 temp]# grep "/bin/bash$" /etc/passwd root:x:0:0:root:/root:/bin/bash learner:x:1000:1000::/home/learner:/bin/bash
Beachten Sie, dass PATTERN in den beiden obigen Beispielen in doppelte Anführungszeichen gesetzt wird, um zu verhindern, dass es von der Shell analysiert wird.
Geben Sie die Zeilen in der Datei /etc/passwd aus, die nicht mit einem Buchstaben in a-s beginnen:
[root@centos7 temp]# grep "^[^a-s]" /etc/passwd tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin
Hier müssen Sie die unterschiedlichen Bedeutungen zwischen den beiden ^, dem ersten, verstehen ^ stellt die erste Zeile dar, das zweite erste Zeichen ^ in [] bedeutet Negation.
In der Ausgabedatei /etc/passwd erscheint das Zeichen 0 dreimal oder öfter hintereinander (beachten Sie das Escape-Zeichen ''):
[root@centos7 temp]# grep "0\{3,\}" /etc/passwd learner:x:1000:1000::/home/learner:/bin/bash
Zum Beispiel in der Ausgabe Datei /etc/passwd, Zeilen, die mit den Zeichen r oder l beginnen:
[root@centos7 temp]# grep "^[r,l]" /etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin learner:x:1000:1000::/home/learner:/bin/bash
Option -i bewirkt, dass grep die Groß-/Kleinschreibung ignoriert, wenn Muster abgeglichen werden:
[root@centos7 temp]# grep -i abcd file ABCD function abcd() { [root@centos7 temp]#
Option -o bedeutet Ausgabe nur übereinstimmende Zeichen, während Nicht die gesamte Zeile:
[root@centos7 temp]# grep -oi abcd file ABCD abcd [root@centos7 temp]#
Option -c zählt die Anzahl der übereinstimmenden Zeilen:
[root@centos7 temp]# grep -oic abcd file 2 [root@centos7 temp]#
Option -v zeigt inverse Übereinstimmung an, z. B. /etc/ passwd beginnt nicht mit /sbin Zeilen, die mit /nologin enden:
[root@centos7 temp]# grep -v "/sbin/nologin$" /etc/passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt learner:x:1000:1000::/home/learner:/bin/bash
Option -f FILE bedeutet, dass jede Zeile in der Datei FILE als Muster abgeglichen wird:
[root@centos7 temp]# cat test abcd ABCD [root@centos7 temp]# grep -f test file ABCD function abcd() { [root@centos7 temp]#
Option -x bedeutet, die gesamte Zeile abzugleichen:
[root@centos7 temp]# grep -xf test file ABCD [root@centos7 temp]#
Option-w bedeutet, das ganze Wort abzugleichen:
[root@centos7 temp]# grep here file here there [root@centos7 temp]# grep -w here file here [root@centos7 temp]#
Option-h bedeutet, den Dateinamen nicht auszugeben, wenn mehrere Dateien vorhanden sind:
[root@centos7 temp]# cat /etc/passwd|grep ^root - /etc/passwd -h root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
Option-n Zeigt die Anzeige von Zeilennummern an:
[root@centos7 temp]# grep -n "^[r,l]" /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 24:learner:x:1000:1000::/home/learner:/bin/bash
Optionen -A N, -B N, -C N zeigt Ausgabeübereinstimmungszeilen und ihre „umgebenden Zeilen“ an
-A N 表示输出匹配行和其之后(after)的N行 -B N 表示输出匹配行和其之前(before)的N行 -C N 表示输出匹配行和其之前之后各N行 [root@centos7 temp]# grep -A 2 ^operator /etc/passwd operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@centos7 temp]# grep -B2 ^operator /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@centos7 temp]# grep -C1 ^operator /etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin
Option -F behandelt PATTERN als seine Literalübereinstimmung (ignoriert spezielle Bedeutungen von Zeichen) entspricht der Ausführung des Befehls fgrep:
[root@centos7 temp]# grep -F ^root /etc/passwd [root@centos7 temp]#
Der Befehl hat keine Ausgabe
Die Option -E kann erweiterte reguläre Ausdrücke verwenden, genau wie die Ausführung des Befehls egrep:
[root@centos7 temp]# egrep "^root|^learner" /etc/passwd root:x:0:0:root:/root:/bin/bash learner:x:1000:1000::/home/learner:/bin/bash
Die Verwendung erweiterter regulärer Ausdrücke bedeutet, dass spezielle Bedeutungen von Zeichen ohne Escapezeichen ausgedrückt werden können, einschließlich ?, ,{,|,(und ).
Die Option -P bedeutet, den regulären Ausdruck von Perl für den Abgleich zu verwenden
Zum Beispiel:
[root@centos7 ~]# echo "helloworld123456"| grep -oP "\d+" 123456 [root@centos7 ~]#
Das „d“ im regulären Ausdruck von Perl bedeutet eine Zahl, was bedeutet, dass eins mit einer Zahl abgeglichen wird mehrmals (wie vim ).
Option -a behandelt Binärdateien als Textdateien:
[root@centos7 ~]# grep -a online /usr/bin/ls %s online help: <%s> [root@centos7 ~]#
Optionen --exclude=GLOB und --include=GLOB bedeuten, Dateien auszuschließen bzw. einzuschließen, die GLOB entsprechen, GLOB bedeutet Platzhalter (Informationen zur Verwendung von „find“ und „xargs“ finden Sie in der Einführung in die Grundbefehle 3):
[root@centos7 temp]# find . -type f | xargs grep --exclude=*.txt --include=test* bash ./test.sh:#!/bin/bash [root@centos7 temp]#
Die leistungsstarken Filterfunktionen von grep beruhen auf der Kombination verschiedener Optionen und regulärer Ausdrücke