Der Befehl grep ist ein Befehl, der unter Linux häufig verwendet wird, unabhängig davon, ob er im täglichen Terminalbetrieb oder bei der Programmierung verwendet wird. Das Folgende ist eine Einführung mit Beispielen.
1. Grundlegende Grammatik
grep [Optionen] MUSTER [DATEI ...]
Gemeinsame Parameter:
-i: Groß- / Kleinschreibung ignorieren (-i hat diese Bedeutung in vielen Befehlen);
-v, --invert-match: Umgekehrte Anzeige, zeigt alle Zeilen an, die keinen übereinstimmenden Text enthalten.
-R, -r, --recursive: Liest rekursiv alle Dateien in jedem Verzeichnis. Entspricht der Option -d recurse;
-o, --nur übereinstimmend: Zeigt nur den Teil an, der mit MUSTER übereinstimmt, in der übereinstimmenden Zeile.
-n, - Zeilennummer: Fügen Sie die Zeilennummer in die Datei ein, in der sie sich vor jeder Ausgabezeile befindet.
--color: Markieren Sie den übereinstimmenden Inhalt. Dieser Parameter wird normalerweise standardmäßig in grep hinzugefügt.
-A NUM, --after-context = NUM: Druckt die folgenden NUM-Zeilen unmittelbar nach der übereinstimmenden Zeile aus.
-B NUM, --before-context = NUM: druckt die obigen NUM-Zeilen vor der übereinstimmenden Zeile aus;
-C NUM, --context = NUM: Druckt die NUM-Zeilen vor und nach dem Kontext der übereinstimmenden Zeile aus.
2. Beispiele
2.1 Keine Parameter
Suchen Sie im aktuellen Verzeichnis die Datei mit der Zeichenfolge "hosts" (siehe unten):
[root@localhost ssh]# grep "hosts" ./*
./ssh_config:# RhostsRSAAuthentication no
./sshd_config:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
./sshd_config:# Change to yes if you don't trust ~/.ssh/known_hosts for
./sshd_config:# Don't read the user's ~/.rhosts and ~/.shosts files
./sshd_config:#IgnoreRhosts yes
[root@localhost ssh]#
Im Suchergebnis wird zuerst die Datei aufgelistet und dann die Zeile ausgegeben, in der sich die Zeichenfolge "Hosts" befindet. Standardmäßig wird der übereinstimmende Inhalt hervorgehoben, z. B. "Hosts".
Überprüfen Sie den Alias des Befehls im System wie folgt:
[root@localhost ssh]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ssh]#
Unter diesen ist der Befehl grep gleich grep --color = auto, und der Parameter --color wurde standardmäßig hinzugefügt.
2.2 -r Parameter
Suchen Sie im aktuellen Verzeichnis rekursiv nach Dateien, die die Zeichenfolge "Hosts" enthalten, dh suchen Sie nach dem aktuellen Verzeichnis und allen Verzeichnissen im aktuellen Verzeichnis und suchen Sie rekursiv. Folgendermaßen:
[root@localhost etc]# grep -r "hosts" ./*
./avahi/hosts:# See avahi.hosts(5) for more information on this configuration file!
./cupshelpers/preferreddrivers.xml: <drivertype name="ghostscript">
./cupshelpers/preferreddrivers.xml: <attribute name="ppd-product" match=".*Ghostscript"/>
./cupshelpers/preferreddrivers.xml: <drivertype>ghostscript</drivertype>
./dnsmasq.conf:# from /etc/hosts or DHCP only.
./dnsmasq.conf:# If you don't want dnsmasq to read /etc/hosts, uncomment the
./dnsmasq.conf:#no-hosts
./dnsmasq.conf:# or if you want it to read another file, as well as /etc/hosts, use
./dnsmasq.conf:#addn-hosts=/etc/banner_add_hosts
./dnsmasq.conf:# automatically added to simple names in a hosts-file.
./dnsmasq.conf:#expand-hosts
……
./tcsd.conf:# on this machine's TCSD by TSP's on non-local hosts (over the internet).
./yum/pluginconf.d/fastestmirror.conf:hostfilepath=timedhosts.txt
[root@localhost etc]#
2.3 -i Parameter
Suchen Sie die Datei mit der Zeichenfolge "hosts" im aktuellen Verzeichnis, und die Zeichen in der Zeichenfolge unterscheiden nicht zwischen Groß- und Kleinschreibung, wie unten gezeigt:
[root@localhost ssh]# grep -i "hosts" ./*
./ssh_config:# HOSTS tmp
./ssh_config:# RhostsRSAAuthentication no
./sshd_config:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
./sshd_config:# Change to yes if you don't trust ~/.ssh/known_hosts for
./sshd_config:#IgnoreUserKnownHosts no
./sshd_config:# Don't read the user's ~/.rhosts and ~/.shosts files
./sshd_config:#IgnoreRhosts yes
[root@localhost ssh]#
In den obigen Suchergebnissen wurden alle Hosts, Hosts und Hosts gefunden.
2.4 -o Parameter
Suchen Sie die Datei mit der Zeichenfolge "Hosts" im aktuellen Verzeichnis und zeigen Sie nur den gleichen Inhalt wie "Hosts" an. Folgendermaßen:
[root@localhost ssh]# grep -o "hosts" ./*
./ssh_config:hosts
./sshd_config:hosts
./sshd_config:hosts
./sshd_config:hosts
./sshd_config:hosts
./sshd_config:hosts
[root@localhost ssh]#
Unter diesen zeigt der angezeigte übereinstimmende Inhalt nur den gleichen Inhalt wie "Hosts".
2,5 -n Parameter
Suchen Sie die Datei mit der Zeichenfolge "hosts" im aktuellen Verzeichnis und zeigen Sie die Zeilennummer des übereinstimmenden Inhalts an, wie unten gezeigt:
[root@localhost ssh]# grep -n "hosts" ./*
./ssh_config:24:# RhostsRSAAuthentication no
./sshd_config:54:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
./sshd_config:56:# Change to yes if you don't trust ~/.ssh/known_hosts for
./sshd_config:59:# Don't read the user's ~/.rhosts and ~/.shosts files
./sshd_config:60:#IgnoreRhosts yes
[root@localhost ssh]#
Die Zeilennummer wird vor dem Spiel hinzugefügt.
2.6 -A-, -B, -C-Parameter
-A: Drucken Sie die folgende 1 Zeile unmittelbar nach der übereinstimmenden Zeile aus, wie unten gezeigt:
[root@localhost ssh]# grep -A 1 "hosts" ./*
./ssh_config:# RhostsRSAAuthentication no
./ssh_config-# RSAAuthentication yes
--
./sshd_config:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
./sshd_config-#HostbasedAuthentication no
./sshd_config:# Change to yes if you don't trust ~/.ssh/known_hosts for
./sshd_config-# HostbasedAuthentication
--
./sshd_config:# Don't read the user's ~/.rhosts and ~/.shosts files
./sshd_config:#IgnoreRhosts yes
./sshd_config-
[root@localhost ssh]#
Unter diesen bedeutet "-", dass eine Zeile von - zwischen benachbarten übereinstimmenden Gruppen gedruckt wird. Wenn zwei übereinstimmende Gruppen in der tatsächlichen Datei eng miteinander verbunden sind, gibt es keine "-" Trennung.
-B: Drucken Sie die obigen 2 Zeilen vor der übereinstimmenden Zeile aus, wie unten gezeigt:
[root@localhost ssh]# grep -B 2 "hosts" ./*
./ssh_config-# ForwardAgent no
./ssh_config-# ForwardX11 no
./ssh_config:# RhostsRSAAuthentication no
--
./sshd_config-#AuthorizedKeysCommandUser nobody
./sshd_config-
./sshd_config:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
./sshd_config-#HostbasedAuthentication no
./sshd_config:# Change to yes if you don't trust ~/.ssh/known_hosts for
./sshd_config-# HostbasedAuthentication
./sshd_config-#IgnoreUserKnownHosts no
./sshd_config:# Don't read the user's ~/.rhosts and ~/.shosts files
./sshd_config:#IgnoreRhosts yes
[root@localhost ssh]#
-C: Drucken Sie 2 Zeilen vor und nach dem Kontext der übereinstimmenden Zeile aus, wie unten gezeigt:
[root@localhost ssh]# grep -C 2 "hosts" ./*
./ssh_config-# ForwardAgent no
./ssh_config-# ForwardX11 no
./ssh_config:# RhostsRSAAuthentication no
./ssh_config-# RSAAuthentication yes
./ssh_config-# PasswordAuthentication yes
--
./sshd_config-#AuthorizedKeysCommandUser nobody
./sshd_config-
./sshd_config:# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
./sshd_config-#HostbasedAuthentication no
./sshd_config:# Change to yes if you don't trust ~/.ssh/known_hosts for
./sshd_config-# HostbasedAuthentication
./sshd_config-#IgnoreUserKnownHosts no
./sshd_config:# Don't read the user's ~/.rhosts and ~/.shosts files
./sshd_config:#IgnoreRhosts yes
./sshd_config-
./sshd_config-# To disable tunneled clear text passwords, change to no here!
[root@localhost ssh]#
Drei, Zusammenfassung
grep ist ein Befehl, der häufig bei Linux-Terminaloperationen verwendet wird. Er wird normalerweise verwendet, um herauszufinden, welche Dateien bestimmten Inhalt enthalten.
Verweise:
[1] Linux-Grep-Handbuch;