Maison > Article > Opération et maintenance > Explication détaillée des caractères génériques et des expressions régulières sous Linux (image)
L'
Regularexpression correspond à la chaîne qualifiée dans le fichier. Cet article vous présentera le joker et les expressions régulières sous linux. Les amis qui en ont besoin peuvent se référer à
wildcard <.>
* N'importe quel caractère, peut être répété plusieurs fois ? N'importe quel caractère, répété une fois
[] représente un caractère
du nom de fichier
expression régulière ls find cp ne prend pas en charge les expressions régulières , mais grep awk sed prend en charge les expressions régulières[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 aabbExpression régulière Plage de correspondance d'expression régulière Standard d'expression régulière Les caractères utilisent l'expression régulière
grep "1" /etc/passwdpour inclure la ligne contenant le mot-clé 1. Grep doit seulement l'inclure. Vous ne voulez pas de caractères génériques et doit être complètement cohérent.
[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'sont les mêmes, mais les le caractère pipe consomme plus de ressources Donc 1. Faire correspondre les lignes contenant des nombres
grep '[0-9]' /etc/passwd2. Faire correspondre les lignes contenant trois nombres consécutifs
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. Faire correspondre les lignes commençant par r et se terminant par n
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. Filtrer ifconfig, intercepter ip
grep -v représente l'interception inversée, ce qui signifie supprimer les lignes avec un certain mot-clé sed signifie remplacement[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
Malentendu
Il y a un malentendu ici. J'y réfléchis depuis longtemps. C'est la différence entre les expressions régulières et les caractères génériquesNous savons que la * signification des caractères génériques est n'importe quel caractère et peut être répétée. plusieurs fois. Le * dans l'expression régulière fait référence à la correspondance du caractère précédent >= 0 fois . Alors, comment puis-je savoir si le * que j'utilise est un caractère générique ou un caractère générique ? ExpressionAu début, je suis tombé dans un malentendu. Regardez la série de commandes suivante[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 acPourquoi les résultats de grep 'a*c' et grep '^a*c$. ' différent ? , je pensais que l'un était un caractère générique et l'autre une expression régulière, car les quatre résultats affichés par a*c correspondaient à n'importe quel nombre de caractères ? ce n'est pas le cas Le rôle des caractères génériques est de faire correspondre les noms de fichiersLes expressions régulières doivent correspondre aux chaînes qualifiées dans les fichiersL'utilisation de grep après l'avoir passé au caractère pipe n'est pas ne correspondant plus aux noms de fichiers. , il s'agit d'une opération sur les fichiers, donc c'est complètement une expression régulière grep 'a*c' signifie correspondre à a>=0, donc tant qu'il contient c, c'est OK. Et grep '^a*c$' est aussi une expression régulière, ce qui signifie qu'elle commence par a, et le deuxième caractère correspond à zéro ou plusieurs fois, suivi de la lettre c , donc il n'y a que aac et ac Remplit les conditionsAlors regarde cet exemple
[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 cbIci grep 'a*b' ne veut pas dire qu'il contient a et b, mais que a est répété 0 fois ou plus et contient ensuite b
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!