TD N°:3 – Expressions régulières
1 Tri
Comptez le nombre de lignes, de mots.
wc –l liste.txt ; wc –w liste.txt
Triez le fichier par ordre alphabétique des étudiants sort –k1 liste.txt
par note décroissante dans la matière A, puis B sort –k4rn –k5rn liste.txt
par matière sort –k2 liste.txt
Filtrez le fichier pour récupérer les étudiants d'informatique.
grep –w info liste.txt
Faites de meme pour les étudiants de physique et de mathématique.
grep –v –w info liste.txt
Filtrez le fichier pour récupérer la liste des étudiantes puis la liste des étudiants.
grep –w F liste.txt; grep –w M liste.txt
Filtrez les étudiants par filière, et affichez UNIQUEMENT les prénoms.
sort –k2 liste.txt | cut –f 1
Créez le fichier math_hommes.txt qui contient les étudiants classés par filières, par sexe, ainsi qu'en note décroissante.
grep –w M liste.txt | sort –k2,2 –k4rn –k5rn > math_hommes.txt
2 Expression régulière : premiers pas
1.
(.
|\n)
{5}2. \\*\**
3. ˆ#.*$
4.
[0-9]+(
\.[0-9]+)?(E[+-] ?[0-9]+) ?
5. ˆ [A-Z][A-Za-z]*(\ [A-Za-z]+)*\.$6. abcde[A-Za-z_]{3}/\.ext
3 Noms de fichiers/répertoire
1) Se placer dans le répertoire /usr/bin
> cd /usr/bin
2) Afficher les fichiers commençant par d
> ls d*
3) Afficher les fichiers dont la deuxième lettre est un d
> ls ?d*
4) Afficher les fichiers commençant et finissant par un d
> ls d*d
5) Afficher les fichiers commençant ou finissant par un d
> ls {d*,*d}
6) Afficher les fichiers commençant et ne finissant pas par un d
> ls d*[^d]
7) Afficher les fichiers commençant par un d ou un x
> ls [dx]*
8) Afficher les fichiers du répertoire /usr/bin/X11 se terminant par un chiffre
> ls /usr/bin/X11/*[0-9]
9) Afficher les fichiers du répertoire /usr/bin/X11 contenant un chiffre et ne se terminant
pas par un chiffre
> ls /usr/bin/X11/*[0-9]*[^0-9]
4 Caractères spéciaux
1) Se placer dans le répertoire SYS de votre répertoire d'accueil.
> cd ~/SYS
2) Créer 4 fichiers de noms respectifs X\$Y, X?Y, X*Y et X**Y
> touch X\$Y X\?Y X\*Y X\*\*Y
> ls
X$Y X*Y X**Y X?Y
3) Visualiser les fichiers ayant au moins un $ ou un ? ou un * dans leur nom
> ls *[\$?*]* ou ls *[\$\?\*]*
X$Y X*Y X**Y X?Y
4) Exécuter la commande rm X?Y, sans confirmer les destructions. Pourquoi 3 destructions
sont-elles demandées ?
> rm X?Y
/bin/rm: remove `X$Y'?
/bin/rm: remove `X*Y'?
/bin/rm: remove `X?Y'?
X?Y est substitué par X$Y X*Y X?Y
> echo X?Y X$Y X*Y X?Y
> echo X*Y X$Y X*Y X?Y
5) Détruire les 4 fichiers
> rm X*Y
/bin/rm: remove `X$Y'? y /bin/rm: remove `X*Y'? y /bin/rm: remove `X**Y'? y /bin/rm: remove `X?Y'? y
X*Y est substitué par X$Y X*Y X**Y X?Y 6) Créer un fichier de nom -l
> touch -l
touch: invalid option -- l
Try `touch --help' for more information.
> touch -- -l ou
> touch ./-l
Le - est pris comme une option de la commande. Il faut donc tromper la commande pour
que le - ne soit pas le début du nom de fichier. On aurait aussi pu donner le nom absolu
du fichier à créer.
7) Visualiser ce seul fichier avec la commande ls
> ls -- -l ou
> ls ./-l
8) Détruire ce fichier, en expliquant les problèmes rencontrés
> rm -- -l idem
> rm ./-l
5 Le fichier expReg
Donner les commandes qui permettent d'afficher les lignes du fichier expReg possédant les
caractéristiques suivantes :
1) Les lignes débutant par une majuscule et se terminant par un point (.) grep '^[A-Z].*\.$' expReg
2) Les lignes contenant un mot de 11 lettres minimum grep '\w\{11,\}' expReg
3) Les lignes contenant 2 fois le mot partir grep '\(.*partir\)\{2\}' expReg 4) Les lignes contenant au moins 6 mots
grep '\(\(\b\| \+\)"\?\w\+"\?\)\{6,\}' expReg 5) Les lignes contenant un nombre supérieur à 27
grep '2[89]\|3[0-9]\|[1-9]\+[0-9]\{2,\}' expReg 6) Les lignes contenant un nombre compris entre 27 et 314 exclus
grep '\(\b| \)\(\([3-9]\|[1-2][0-9]\|30\)[0-9]\|31[0-3]\)\(\b|
\)' expReg ou
grep '\(\b\| \)\(2[89]\|30\?[0-9]\|[1-2][0-9]\{2\}\|31[0-3]\}\)
\(\b\| \)' expReg
7) Les lignes ne contenant que des nombres compris entre 27 et 314 exclus
grep '^\(\(\| \)\(2[8-9]\|\([3-9]\|[1-2][0-9]\|30\)[0-9]\|31[0-3]
\)\)\+$' expReg
6 Génome
ARCCGKKN : A[AG]CCG[GT][GT].
SMANAAAAAA : [GC][AC]A.A{6}
AMYGGGTTAN : A[AC][CT]G{3}TTA.
SGGATTAN : [GC]GGATTA.
GTANTNN : GTA.T..
([GC][AC]A.A{6}|A[AC][CT]G{3}TTA.){2}
grep –B 1 –E ‚[GC][AC]A.A{6}’ dmel.fasta