Maison > Article > Opération et maintenance > Caractères génériques et expressions régulières sous Linux
Les expressions régulières correspondent aux chaînes qualifiées dans les fichiers. L'article suivant présente les caractères génériques et les expressions régulières sous Linux. Les amis qui en ont besoin peuvent s'y 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
Exemple : [a,b,c] représente n'importe quel caractère générique
dans abc
Expression régulière utilisée pour faire correspondre les noms de fichiers
L'expression régulière est utilisée pour faire correspondre les chaînes qui remplissent les conditions du fichier
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 racine racine 0 16 mai 19:47 aa
-rw-r--r -- 1 racine racine 0 16 mai 19:47 aab
-rw-r--r-- 1 racine racine 0 16 mai 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
Expression régulière caractères spéciaux
Plage de correspondance d'expression régulière
Régulier Les caractères standard de l'expression
utilisez l'expression régulière
grep "1" /etc/passwd
tant que la ligne contenant le mot-clé 1, grep Incluez-la simplement, vous ne voulez pas de caractères génériques, elle doit être exactement le même
[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 le personnage du tuyau consomme plus de ressources
donc
1. lignes contenant des nombres
grep '[0-9]' /etc/passwd
2. 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 inverse, ce qui signifie supprimer les lignes avec un certain mot-clé sed a le sens de 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. caractères génériques.
Nous savons que le caractère générique * fait référence à n'importe quel caractère, et le * dans l'expression régulière qui peut être répétée plusieurs fois fait référence à la correspondance du caractère précédent >= 0 fois
Les deux. sont complètement différents Oui, comment savoir si le * que j'ai utilisé est un caractère générique ou une expression régulière
Au 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 ac
Pourquoi les résultats de grep 'a*c' et grep '^a*c$' sont-ils différents ? Je pensais que l'un était un caractère générique et l'autre une expression régulière, car les quatre ? les résultats affichés par a*c étaient exactement
non. Cela correspond-il à n'importe quel nombre de caractères
En fait, ce n'est pas le cas
Le caractère générique est utilisé pour correspondre au nom du fichier.
L'expression régulière doit faire correspondre les caractères qualifiés dans le fichier. Utiliser grep après avoir passé la chaîne
au caractère pipe ne doit plus correspondre au nom du fichier. , donc c'est exactement l'expression régulière
grep 'a*c' Cela signifie correspondre à a>=0, donc tant qu'elle contient c, c'est OK
et grep '^a *c$' est également 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 seuls aac et ac sont qualifiés
alors regardez 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 cb
Ici grep 'a*b' ne veut pas dire qu'il contient a et b, mais que a est répété 0 ou plus times et contient ensuite b
Ce qui précède est le modèle générique et régulier sous Linux introduit par l'éditeur Expression, j'espère qu'il sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et le. l'éditeur vous répondra à temps. Je voudrais également remercier tout le monde pour votre soutien au site Web de Script House !
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!