Maison  >  Article  >  Opération et maintenance  >  Caractères génériques et expressions régulières sous Linux

Caractères génériques et expressions régulières sous Linux

巴扎黑
巴扎黑original
2017-06-16 10:39:361799parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn