Detaillierte Erklärung der grep- und egrep-Befehle in Linux

Detaillierte Erklärung der grep- und egrep-Befehle in Linux

Vertreter / egrep

Syntax: grep [-cinvABC] 'word' Dateiname

-c: Druckt die Anzahl der Zeilen, die die Anforderungen erfüllen
-i: Groß-/Kleinschreibung ignorieren
-n: Gibt die Zeilennummern zusammen mit den Zeilen aus, die die Anforderungen erfüllen
-v: Zeilen drucken, die die Anforderungen nicht erfüllen
-A: gefolgt von einer Zahl (mit oder ohne Leerzeichen), z. B. bedeutet A2, dass die Zeile gedruckt wird, die die Anforderungen erfüllt, und die folgenden zwei Zeilen
-B: gefolgt von einer Zahl, z. B. B2, was bedeutet, dass die Zeilen gedruckt werden, die die Anforderungen erfüllen, und die beiden Zeilen darüber
-C: gefolgt von einer Zahl, z. B. C2, was bedeutet, dass die Zeile gedruckt wird, die die Anforderungen erfüllt, und zwei Zeilen darüber und darunter.

Drucken Sie die Zeile, die „halt“ enthält, und die beiden darauf folgenden Zeilen.

[root@localhost ~]# grep -A2 'halt' /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

Drucken Sie die Zeile, die „halt“ enthält, und die beiden Zeilen darüber.

[root@localhost ~]# grep -B2 'halt' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
Herunterfahren: x: 6: 0: Herunterfahren: / sbin: / sbin / Herunterfahren
halt:x:7:0:halt:/sbin:/sbin/halt

Drucken Sie die Zeile, die „halt“ enthält, und die beiden Zeilen darüber und darunter.

Zeilen mit einem bestimmten Schlüsselwort herausfiltern und die Zeilennummer ausgeben

[root@localhost ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:Operator:x:11:0:Operator:/root:/sbin/nologin

Filtern Sie die Zeilen ohne ein bestimmtes Schlüsselwort und geben Sie die Zeilennummer aus

[root@localhost ~]# grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:Herunterfahren:x:6:0:Herunterfahren:/sbin:/sbin/Herunterfahren
8:halt:x:7:0:halt:/sbin:/sbin/halt
26:test:x:511:511::/home/test:/bin/bash
27:test1:x:512:511::/home/test1:/bin/bash

Alle Zeilen mit Zahlen herausfiltern

[root@localhost ~]# grep '[0-9]' /etc/inittab
# Upstart funktioniert, siehe init(5), init(8) und initctl(8).
# 0 - halt (Initdefault NICHT hierauf setzen)
# 1 - Einzelbenutzermodus
# 2 - Multiuser, ohne NFS (Dasselbe wie 3, wenn Sie kein Netzwerk haben)
# 3 - Vollständiger Mehrbenutzermodus
# 4 - unbenutzt
# 5 - X11
# 6 - Neustart (Initdefault NICHT hierauf setzen)
id:3:initstandard:

Alle Zeilen herausfiltern, die keine Zahlen enthalten

[root@localhost ~]# grep -v '[0-9]' /etc/inittab
# inittab wird von Upstart nur für den Standard-Runlevel verwendet.
#
# DAS HINZUFÜGEN ANDERER KONFIGURATIONEN HIER HAT KEINE AUSWIRKUNGEN AUF IHR SYSTEM.
#
# Die Systeminitialisierung wird durch /etc/init/rcS.conf gestartet
#
# Einzelne Runlevel werden von /etc/init/rc.conf gestartet
#
# Strg-Alt-Entf wird von /etc/init/control-alt-delete.conf gehandhabt
#
# Terminal-Gettys werden von /etc/init/tty.conf und /etc/init/serial.conf verwaltet.
# mit Konfiguration in /etc/sysconfig/init.
#
# Informationen zum Schreiben von Upstart-Eventhandlern oder zum
#
# Standard-Runlevel. Die verwendeten Runlevel sind:
#

Entfernen Sie alle Zeilen, die mit „#“ beginnen.

[root@localhost ~]# grep -v '^#' /etc/inittab
id:3:initstandard:

Entfernen Sie alle Leerzeilen und Zeilen, die mit „#“ beginnen.

[root@localhost ~]# grep -v '^#' /etc/crontab |grep -v '^$'
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=Stamm
HOME=/

In regulären Ausdrücken gibt „^“ den Zeilenanfang an, „$“ das Zeilenende und eine leere Zeile kann durch „^$“ dargestellt werden. Wie druckt man Zeilen, die nicht mit einem englischen Buchstaben beginnen?

[root@localhost ~]# vim test.txt
[root@localhost ~]# cat test.txt
123
ABC
456
abc2323
#laksdjf
Allellllllll

Schreiben Sie zum Experimentieren zunächst einige Zeilen mit Zeichenfolgen in test.txt.

[root@localhost ~]# grep '^[^a-zA-Z]' test.txt
123
456
#laksdjf
[root@localhost ~]# grep '[^a-zA-Z]' test.txt
123
456
abc2323
#laksdjf

Wenn es eine Zahl ist, verwenden Sie das Format [0-9]. Natürlich können Sie manchmal auch das Format [15] verwenden, das nur 1 oder 5 enthält. Beachten Sie, dass es nicht als 15 gezählt wird. Wenn Sie Zahlen sowie Groß- und Kleinbuchstaben herausfiltern möchten, sollten Sie [0-9a-zA-Z] schreiben. Darüber hinaus hat [ ] eine andere Form, nämlich das [^-Zeichen], das andere Zeichen als die Zeichen in [ ] darstellt.

Filtern Sie beliebige Zeichen und wiederholte Zeichen

[root@localhost ~]# grep 'r..o' /etc/passwd
Operator:x:11:0:Operator:/root:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
vcsa:x:69:69:Eigentümer des virtuellen Konsolenspeichers:/dev:/sbin/nologin

. steht für ein beliebiges Zeichen. Im obigen Beispiel werden die Zeilen herausgefiltert, die zwei Zeichen zwischen r und o enthalten. * steht für null oder mehr der vorhergehenden Zeichen.

[root@localhost ~]# grep 'ooo*' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

„ooo*“ bedeutet oo, ooo, oooo … oder mehr „o“. Überlegen Sie jetzt, was die Kombination „.*“ bedeutet?

[root@localhost ~]# grep '.*' /etc/passwd |wc -l
27
[root@localhost ~]# wc -l /etc/passwd
27 /etc/passwd

„.*“ bedeutet null oder mehr beliebige Zeichen, einschließlich Leerzeilen.

Geben Sie die Anzahl der Vorkommen des zu filternden Zeichens an

[root@localhost ~]# grep 'o\{2\}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

Sie können -E auch ohne das Escape-Zeichen \ verwenden.

grep -E 'o{2}' /etc/passwd

Hier wird { } mit Zahlen darin verwendet, die angeben, wie oft das vorherige Zeichen wiederholt werden soll. Im obigen Beispiel ist damit die Zeile gemeint, die zwei O’s enthält, also ‚oo‘. Beachten Sie, dass das Escape-Zeichen „\“ auf beiden Seiten von {} erforderlich ist. Darüber hinaus können wir {} auch verwenden, um einen Bereich darzustellen. Das spezifische Format ist „{n1,n2}“, wobei n1<n2 bedeutet, dass das vorherige Zeichen n1 bis n2 Mal wiederholt wird. n2 kann auch leer sein, was bedeutet, dass es größer oder gleich n1 Mal ist.

Das oben erwähnte grep ist auch ein häufig verwendetes Tool, egrep. Einfach ausgedrückt ist letzteres eine erweiterte Version des ersteren. Wir können egrep verwenden, um Aufgaben zu erledigen, die grep nicht erledigen kann. Natürlich kann egrep auch Aufgaben erledigen, die grep erledigen kann. Wenn Sie damit Probleme haben, informieren Sie sich einfach über egrep, denn die Funktionen von grep reichen für Ihre tägliche Arbeit aus. Im Folgenden sind einige Verwendungen von egrep aufgeführt, die für grep nicht verwendet werden. Bearbeiten Sie zur Vereinfachung des Tests die Datei test.txt mit dem folgenden Inhalt:

rot:x:0:0:/rot:/bin/bash
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
11111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Filtern Sie nach einem oder mehreren vorangehenden Zeichen

[root@localhost ~]# egrep 'o+' test.txt
rot:x:0:0:/rot:/bin/bash
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost ~]# egrep 'oo+' test.txt
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost ~]# egrep 'ooo+' test.txt
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash

Filtert nach null oder einem Vorkommen des vorhergehenden Zeichens

[root@localhost ~]# egrep 'o?'
rot:x:0:0:/rot:/bin/bash
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
11111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@localhost ~]# egrep 'ooo?'
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost ~]# egrep 'oooo?'
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash

Filterzeichenfolge 1 oder Zeichenfolge 2

[root@localhost ~]# egrep 'aaa|111|ooo' test.txt
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
11111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Anwendung von ( ) in egrep

[root@localhost ~]# egrep 'r(oo)|(at)o' test.txt
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash

Verwenden Sie ( ), um ein Ganzes darzustellen. Beispielsweise bedeutet (oo)+ ein „oo“ oder mehrere „oo“.

[root@localhost ~]# egrep '(oo)+' test.txt
Operator:x:11:0:Operator:/root:/sbin/nologin
Operator:x:11:0:Operator:/root:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash

Oben sind alle relevanten Wissenspunkte zu den Linux-Befehlen grep und egrep aufgeführt, die dieses Mal vorgestellt werden. Vielen Dank für Ihr Lernen und Ihre Unterstützung für 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux
  • Grep-Befehl zum Abgleichen von Tabulatoren und Zeilenumbrüchen in Linux
  • Linux verwendet grep zum Filtern mehrerer Bedingungen und allgemeine grep-Filterbefehle
  • So rufen Sie Dateiinhalte mit dem Grep-Befehl in Linux ab
  • Allgemeine Befehle und Unterschiede zwischen find und grep in Linux
  • Einführung in die grundlegenden Grep-Befehle zur Textfilterung unter Linux (5)
  • Detaillierte Erklärung des Linux-Grep-Befehls
  • Tiefgreifendes Verständnis des Grep-Befehls in Linux
  • Verwendung des Grep-Befehls unter Linux
  • Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux

<<:  Beschreibung der Schreibmethode des Foreach-Arrays in Vue und des Traversal-Arrays in js

>>:  Detaillierte Erläuterung des Fehlerproblems beim Festlegen des Standardwerts 0000-00-00 in den Datums- und Datums-/Uhrzeittypen der MySQL-Datenbank

Artikel empfehlen

Führen Sie die Initialisierungs-SQL aus, wenn Docker MySQL startet

1. Ziehen Sie das Mysql-Image docker pull mysql:5...

Analyse des Implementierungsprozesses der drei Modi des VMWare-Netzwerkadapters

Drei Modi Bridged (Bridge-Modus), NAT (Network Ad...

Vue-Direktiven v-html und v-text

Inhaltsverzeichnis 1. Anweisungen zum Rendern von...

dh Filtersammlung

Der IE hat uns in der frühen Entwicklungsphase Ko...

So ändern Sie das Standardnetzwerksegment der Docker0-Brücke in Docker

1. Hintergrund Wenn der Docker-Dienst gestartet w...

So erstellen Sie DockerHub selbst

Der Docker Hub, den wir zuvor verwendet haben, wi...

Eine detaillierte Diskussion der Komponenten in Vue

Inhaltsverzeichnis 1. Komponentenregistrierung 2....

Detaillierte Erklärung des Javascript Echarts Luftqualitätskarteneffekts

Wir müssen zunächst die Luftqualitätsdaten mit de...

Einführung in die Vue-Grundlagen: Installation und Verwendung von Vuex

Inhaltsverzeichnis 1. Was ist vuex 2. Installatio...

Einführung in die Bereitstellung des Selenium-Crawler-Programms unter Linux

Inhaltsverzeichnis Vorwort 1. Was ist Selen? 2. N...