Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Ausführliche Erklärung von Wildcards und regulären Ausdrücken unter Linux (Bild)

Ausführliche Erklärung von Wildcards und regulären Ausdrücken unter Linux (Bild)

黄舟
黄舟Original
2017-05-27 10:23:561975Durchsuche

RegulärerAusdruck entspricht der qualifizierten Zeichenfolge in der Datei. In diesem Artikel werden Ihnen der Platzhalter und reguläre Ausdrücke unter Linux vorgestellt. Freunde, die ihn benötigen, können sich auf

Platzhalter

* Beliebiges Zeichen, kann mehrmals wiederholt werden

? Beliebiges Zeichen, einmal wiederholt
[] stellt ein Zeichen dar

Beispiel: [a,b,c] bedeutet Jeder

-Platzhalter in ABC wird verwendet, um mit dem

regulären Ausdruck

regulären Ausdruck

ls find cp unterstützt keine regulären Ausdrücke

, aber grep awk sed unterstützt reguläre Ausdrücke

Regulärer Ausdruck
[root@hadoop-bigdata01 test]# touch aa
[root@hadoop-bigdata01 test]# touch aab aabb
[root@hadoop-bigdata01 test]# ll
total 0
-rw-r--r-- 1 root root 0 May 16 19:47 aa
-rw-r--r-- 1 root root 0 May 16 19:47 aab
-rw-r--r-- 1 root root 0 May 16 19:47 aabb
[root@hadoop-bigdata01 test]# ls aa
aa
[root@hadoop-bigdata01 test]# ls aa?
aab
[root@hadoop-bigdata01 test]# ls aa*
aa  aab  aabb
Sonderzeichen

Übereinstimmungsbereich für reguläre Ausdrücke

Standard für reguläre Ausdrücke Die Zeichen

verwenden den regulären Ausdruck

um die Zeile mit dem Schlüsselwort 1 einzuschließen. Grep muss es nur einschließen. Sie möchten keine Platzhalter und müssen vollständig konsistent sein.
 grep "1" /etc/passwd

sind gleich, aber die Pipe-Zeichen verbrauchen mehr Ressourcen
[root@hadoop-bigdata01 test]# grep "1" /etc/passwd
bin:x:1:1:bin:/bin:/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
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
wang:x:501:501::/home/wang:/bin/bash
grep 'root' /etc/passwd
cat /etc/passwd | grep 'root'

Also

1. Übereinstimmungslinien mit Zahlen

2. Übereinstimmungslinien mit drei aufeinanderfolgenden Zahlen
  grep '[0-9]' /etc/passwd

 grep '[0-9][0-9][0-9]' /etc/passwd      或者  grep ':[0-9][0-9][0-9]:' /etc/passwd
[root@hadoop-bigdata01 test]# grep '[0-9][0-9][0-9]' /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
liucheng:x:500:500::/home/liucheng:/bin/bash
wang:x:501:501::/home/wang:/bin/bas
3. Passen Sie Zeilen an, die mit r beginnen und mit n enden

 grep '^r.*n$' /etc/passwd
.*代表所有
[root@hadoop-bigdata01 test]# grep '^r.*n$' /etc/passwd        
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
4. Filtern Sie

ifconfig, intercept ip grep -v steht für Reverse Interception, was bedeutet, dass Zeilen mit einem bestimmten Schlüsselwort entfernt werden. sed bedeutet Ersetzung

[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:'
     inet addr:192.168.126.191 Bcast:192.168.126.255 Mask:255.255.255.0
     inet addr:127.0.0.1 Mask:255.0.0.0
[root@hadoop-bigdata01 test]# 
[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1'
     inet addr:192.168.126.191 Bcast:192.168.126.255 Mask:255.255.255.0
[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | sed 's/inet addr://g'
     192.168.126.191 Bcast:192.168.126.255 Mask:255.255.255.0
[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | sed 's/inet addr://g' | sed 's/Bcast.*//g'
     192.168.126.191

MissverständnisHier gibt es ein Missverständnis. Es ist der Unterschied zwischen regulären Ausdrücken und Platzhaltern.

Wir wissen, dass die Bedeutung von Platzhaltern ein beliebiges Zeichen ist und mehrfach wiederholt werden kann Das * im regulären Ausdruck bezieht sich auf die Übereinstimmung mit dem vorherigen Zeichen

. Woher weiß ich also, ob es sich bei dem *, das ich verwende, um einen Platzhalter handelt?

Zuerst geriet ich in ein Missverständnis.

Warum sind die Ergebnisse von grep 'a*c' und grep '^a*c$'? anders? , ich dachte, einer sei ein Platzhalter und der andere ein regulärer Ausdruck, weil die vier von a*c angezeigten Ergebnisse zufällig
[root@hadoop-bigdata01 test]# touch ac aac abc abbc
[root@hadoop-bigdata01 test]# ll
total 0
-rw-r--r-- 1 root root 0 May 16 19:55 aac
-rw-r--r-- 1 root root 0 May 16 19:55 abbc
-rw-r--r-- 1 root root 0 May 16 19:55 abc
-rw-r--r-- 1 root root 0 May 16 19:55 ac
[root@hadoop-bigdata01 test]# ls | grep 'a*c'
aac
abbc
abc
ac
[root@hadoop-bigdata01 test]# ls | grep 'a.*c'
aac
abbc
abc
ac
[root@hadoop-bigdata01 test]# ls | grep '^a.*c'
aac
abbc
abc
ac
[root@hadoop-bigdata01 test]# ls | grep '^a*c' 
aac
ac

mit einer beliebigen Anzahl von Zeichen übereinstimmen

? der Fall

Die Rolle von Platzhaltern besteht darin, Dateinamen abzugleichen

Reguläre Ausdrücke dienen dazu, qualifizierte Zeichenfolgen in Dateien abzugleichen

Nach der Übergabe an das Pipe-Zeichen wird mit grep nein mehr mit dem Dateinamen übereinstimmen, dies ist eine Operation für Dateien, also ist es ein vollständig regulärer Ausdruck

grep 'a*c' bedeutet Übereinstimmung mit a>=0, also ist es so, solange es c enthält OK

Und grep '^a*c$' ist ebenfalls ein regulärer Ausdruck, was bedeutet, dass er mit a beginnt und das zweite Zeichen mindestens eine Null oder mehrere Male entspricht, gefolgt vom Buchstaben c

, also gibt es nur aac und ac Erfüllt die Bedingungen

Sehen Sie sich also dieses Beispiel an

Hier bedeutet grep 'a*b' nicht, dass es a und b enthält, sondern dass a 0 oder öfter wiederholt wird und dann b enthält
[root@hadoop-bigdata01 test]# ls
a aac abb abbc abc ac b bb c cb
[root@hadoop-bigdata01 test]# ls | grep 'a*b'
abb
abbc
abc
b
bb
cb

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung von Wildcards und regulären Ausdrücken unter Linux (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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