Licence Math/Info - L1
Automates
TP1 – Expressions régulières
Quelques bases sous Unix / Linux
:
Quelques conseils « en vrac » pour être à l'aise avec Unix / Linux :
• familiarisez-vous le terminal (≃ console, ligne de commande, shell, bash, sh...),
• éditeurs de textes : « gedit », « kate », « emacs », « vi », « nano »,
• dans le terminal, utilisez :
◦ la touche tabulation pour « auto-compléter » une commande ou un nom de fchier, appuyez plusieurs fois dessus pour afcher les propositions d'auto-complétion,
◦ la sélection avec le curseur (ou en double click) pour copier, le bouton du milieu ou le raccourci shift+inser pour coller,
◦ l'aide sur les commandes, le manuel « man » (par ex. « man cd », « man rm »...),
◦ le raccourci ctrl+c ou ctrl+d pour arrêter un programme en cours d'exécution.
Les commandes couramment utilisées (au moins pour ce TP) :
• cd : aller dans un dossier (absolu « /home/nouvel/test... » ou relatif « test/ »),
• ls ou ll : afcher les fchiers du dossier courant,
• pwd : afcher le chemin du dossier courant,
• mkdir : créer un dossier,
• rm : efacer un fchier (ou un dossier : « rm -r »),
• cat : envoie le contenu d'un (des) fchier(s) vers le fux de sortie standard,
• less : visualiser un fux (fèches pour monter / descendre, « q » pour quitter),
• grep : afcher les lignes du fux qui correspondent à une expression régulière,
• sort : trie les lignes du fux par ordre lexicographique,
• uniq : omet les lignes répétées dans le fux,
• wc : compte le nombre de lignes / mots / caractères dans le fux.
Principe des fux de données :
Par exemple :
• Envoyer le contenu d'un fchier vers la sortie standard (terminal) : cat fchier.txt
• Envoyer le contenu d'un fchier vers la visualisation : cat fchier.txt | less
• Envoyer le contenu d'un fchier vers « grep », qui sélectionne les lignes contenant le mot « bonjour », puis le visualiser :
cat fchier.txt | grep syndicat | less
• Envoyer le contenu d'un fchier vers « grep », qui sélectionne les lignes contenant le mot « bonjour », puis l'enregistrer dans un autre fchier :
cat fchier.txt | grep syndicat > fchierbonjour.txt De manière générale :
• pour tester des commandes, exécutez les dans le terminal,
• lorsque la sortie est volumineuse, ajoutez « | less » pour visualiser,
• lorsque vous voulez enregistrer la sortie dans un fchier, ajoutez « > fchier.txt »,
• pour voir (ou compter) des entrées distinctes, ajoutez « | sort | uniq -c ».
programme Flux de
données Flux de
données pipe « | »
Chevron « > »
terminal
fichier
Quelques expressions régulières simples
:
Créez vous un répertoire de travail sur votre espace personnel. Récupérez sur l'ENT le fchier
« Corpus EstRepublicain 2003-02-14 » et enregistrez-le dans le dossier. Essayez les commandes « cat » et « less » avec ce fchier.
Utilisez ces deux commandes avec la commande « grep » pour chercher des expressions régulières. Essentiellement, utilisez grep de deux manières pour trouver une expression régulière :
• grep -E "expression régulière" : afche la ligne contenant une (ou plusieurs) chaîne(s) de caractères qui correspondent à l'expression régulière,
• grep -Eo "expression régulière" : n'afche que les chaînes de caractères qui correspondent à l'expression régulière.
Lorsque l'on programme des expressions régulières, les symboles suivants sont utilisées :
• a* : fermeture (itéré, étoile de Kleene), répéter 0 à n fois un caractère,
• a+ : fermeture stricte, répéter 1 à n fois un caractère,
• a? : répéter 0 à 1 fois un caractère,
• a|b : disjonction (équivalent du + dans les expressions régulières formelles),
• (a) : parenthèses, pour isoler une expression, par ex. : ab* ≠ (ab)*.
Si l'on veut reconnaître un caractère spécial (*, +, ? (, ), ., ^, $, [, ]) il faut le précéder de « \ ».
Recherchez les expressions régulières suivantes :
• la chaîne «vers» (sans espace),
• la chaîne « vers » (avec espace),
• les chaînes « suis », « est » , « sont » ou « sera »,
• les chaînes contenant un ou plusieurs « r » encadrés de « e » ou de « a »,
• les chaînes contenant «eux» ou «aux».
Classes de caractères
:
Les expressions régulières peuvent faire appel à des classes de caractères (sous-alphabets), défnies comme suit :
• . : n'importe quel caractère,
• ^ / $ : début / fn de ligne,
• [ac] : caractère a ou caractère c,
• [0-9] : n'importe quel caractère numérique ( = [:digit:]),
• [a-z] : n'importe quel caractère alphabétique minuscule ( = [:lower:]),
• [A-Z] : n'importe quel caractère alphabétique majuscule ( = [:upper:]),
• [a-Z] : n'importe quel caractère alphabétique ( = [:alpha:]),
• [a-9] : n'importe quel caractère alphabétique ou numérique ( = [:alnum:]),
• [:space:] : marques d'espacement (espaces, tabulations).
Il est possible de prendre le complémentaire d'une classe en ajoutant « ^ » au début de la spécifcation de la classe, par ex. [^ac] reconnaît n'importe quel caractère sauf a et c, ou [^0-9] reconnaît n'importe quel caractère qui n'est pas numérique.
A l'aide des classes de caractères, cherchez les expressions régulière suivantes :
• n'importe quelle suite de chifres,
• une année,
• une heure, au format XXhYY,
• un mot au pluriel,
• les mots qui commencent par « vers»,
• les mots qui commencent une phrase,
• les noms de villes : qui se terminent par «ville » ou qui commencent pas « Saint-»,
• les paires de mots séparés par « de »,
• les expressions entre guillemets « expression ».