Heim > Artikel > Betrieb und Instandhaltung > Ausführliche Erklärung von Wildcards und regulären Ausdrücken unter Linux (Bild)
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
regulären Ausdruck
regulären Ausdruckls 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 aabbSonderzeichen
Ü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/passwdsind 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 Zahlengrep '[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/bas3. 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/nologin4. 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!