Outils de manipulation de texte

Outils de manipulation de texte

Linux comporte un certains nombre d’utilitaires permettant de manipuler du texte. Il est important de bien définir ce terme : nous parlons ici d’utilitaires permettant de réaliser sur des textes des opérations de recherche, remplacement, extraction, comptage, analyse, formatage,.. et ceci de façon très rapide et automatisable. Il ne s’agit pas d’utilitaires de traitement de texte au sens de Publication Assistée par Ordinateur. Dans le contexte qui nous intéresse ici, le terme texte s’applique à un flot de caractères constitué de lignes. Tous les utilitaires décrits dans ce chapitre sont capables de traiter des textes contenus dans des fichiers, mais seront le plus souvent utilisés en tant que filtres : ils lisent un texte ligne par ligne sur leur entrée standard, le traitent et produisent un texte et/ou un résultat sur leur sortie standard. Grâce au mécanisme des tubes (voir le paragraphe 7.3), il sera possible de réaliser des traitements très complexes sur des flots de texte de taille illimitée. Le flot d’entrée peut être la sortie d’une commande ou le contenu d’un fichier, le résultat pouvant être redirigé vers un fichier. Tous ces utilitaires interprètent la même description des motifs de caractères : les expressions régulières. Ces utilitaires présentent une gradation de possibilités : du plus simple au plus puissant, chacun d’entre eux peut faire ce que font les précédents. On pourrait se contenter de ne connaître que le plus complet. En pratique, il vaut mieux utiliser le plus simple dans chaque cas. Ces utilitaires sont les suivants, par ordre croissant de possibilités : Outils de manipulation de texte   • Outils de manipulation de texte grep Recherche des chaînes de caractères conformes à un motif donné et les affiche. sed (Stream Editor, éditeur de flot) Recherche des chaînes conformes à un motif donné et les modifie. Petit langage de programmation permettant l’écriture de programmes : les scripts sed. awk Permet de rechercher, modifier, formater, compter, afficher, traduire, … awk est un langage de programmation spécialisé permettant d’effectuer des traitements relativement complexes sous forme de programmes très courts. Nous présenterons également tr, complémentaire des utilitaires précédents, bien qu’il ne traite pas les expressions régulières. Il rend de grands services dans la même classe d’applications. Nous allons d’abord présenter les expressions régulières d’une façon très générale et indépendamment des utilitaires grep, sed, awk puis nous présenterons les utilitaires eux–même. 

LES EXPRESSIONS RÉGULIÈRES

Les expressions régulières permettent de décrire des motifs formés de caractères. Ce mécanisme est très similaire au mécanisme de génération de noms de fichiers par le shell que nous avons décrit au paragraphe 7.7. Il en diffère toutefois par les aspects suivants : la génération de noms est un mécanisme rudimentaire qui décrit de façon générique des noms de fichiers, alors que les expressions régulières représentent une description générique très sophistiquée de chaînes de caractères contenues dans des fichiers (ou un flot de caractères). Exemples Rechercher toutes les chaînes de caractères alphabétiques dans : ● le fichier fich1.f ● tous les fichiers dont les noms se terminent par .f ● tous les fichiers dont les noms commencent par une majuscule et se terminent par .f 14.1 Les expressions régulières 177 © Dunod – La photocopie non autorisée est un délit. xstra> grep ’[a zA Z]’ fich1.f xstra> grep ’[a zA Z]’ *.f xstra> grep ’[a zA Z]’ [A Z]*.f ↑ ↑ § expression régulière génération de noms de fichier La syntaxe des expressions régulières est en outre différente de la syntaxe de génération de noms. Ces expressions sont utilisées par un grand nombre d’utilitaires : non seulement grep, sed et awk, mais également par le langage perl (the Practical Extraction and Report Language) et tout éditeur de texte, dont vi et emacs. Les expressions régulières servent à décrire de façon concise et inambiguë des motifs de caractères, comme par exemple : « toutes les chaînes de 1 à 8 caractères alphanumériques, le premier étant alphabétique ». Cette périphrase traduite en expression régulière devient : [A Za z][A Za z0 9]{0,7} Les expressions régulières (et les utilitaires qui les comprennent) ne sont pas limitées au monde Unix : grep, sed, awk, et le langage perl ont été portés sur d’autres systèmes d’exploitation. Il existe deux sortes d’expressions régulières : les expressions régulières étendues (ere) que nous décrirons ici, et les expressions régulières de base, considérées comme obsolètes dans le monde linux, dont nous dirons quelques mots.

Conventions d’écriture

Dans ce chapitre, on dira qu’une chaîne de caractères vérifie une expression régulière (l’aide en ligne utilise le terme : match), et le terme caractère exclut le caractère . ● ch désigne un caractère quelconque sauf un caractère spécial ● sp désigne un caractère spécial Les caractères spéciaux pour les expressions régulières sont les suivants : | . * + ? ^ $ ( ) [ ] {} \ Les expressions régulières sont construites progressivement, à partir de briques de base appelées expressions régulières atomiques. 14.1.2 Les expressions régulières atomiques : era On appelle expression régulière atomique (era) un motif constitué d’un seul caractère appartenant à un ensemble précis. 178 14 • Outils de manipulation de texte Exemples a § le caractère a [i n] § un caractère appartenant à l’ensemble ijklmn [ i n] § ijklmn . § un caractère quelconque \. § le caractère . [^0 9] § tout caractère autre qu’un chiffre [^0 9^] § tout caractère autre qu’un chiffre ou ^ § car le dernier ^ n’est pas après [ 14.1.3 La construction d’une expression régulière : er Si l’on recherche une chaîne de caractères (un « mot ») conforme à un certain motif, il faut pouvoir définir l’ensemble des caractères constituant ce « mot », le nombre de caractères dans ce mot, et à quel endroit le chercher (quoi ? combien ? où ?). Par exemple : un mot de 3 à 6 lettres minuscules au début de la ligne. Les briques élémentaires (era) définissent des ensembles de caractères (quoi ?) et seront combinées entre elles par trois opérations élémentaires : la concaténation, la quantification (combien ?) et l’ancrage (où ?). La concaténation Une expression régulière (er) peut être obtenue par concaténation (juxtaposition) d’expressions régulières atomiques (era). La concaténation est décrite sans opérateur ou caractère spécial : abc signifie : a suivi de b suivi de c. Exemples abc § la chaîne abc [Oo]ui § la chaîne Oui ou la chaîne oui [A Z][0 9].. § une majuscule suivie d’un chiffre suivi cette era définit l’ensemble de caractères suivants ch l’ensemble constitué du seul caractère ch \sp l’ensemble constitué du seul caractère spécial sp . l’ensemble de tous les caractères [gkl] l’ensemble constitué des caractères placés entre [ ] (g,k,l) [^gkl] l’ensemble constitué des caractère autres que g,k,l. Le caractère ^ placé après [ indique la négation. [a-z] l’ensemble constitué des caractères compris entre a et z (ordre alphabétique) [^a-z] l’ensemble constitué des caractères non compris entre a et z 14.1 Les expressions régulières 179 © Dunod – La photocopie non autorisée est un délit. § de deux caractères quelconques : § A8b5 ou Z444 mais pas h7fu [a z][0 9].\. § une minuscule suivie d’un chiffre suivi § d’un caractère quelconque suivi d’un § point : a8b. ou h6.. mais pas Z67f La quantification Les quantifieurs permettent de définir combien de fois l’era qui précède est répétée. Si ⊗ désigne une expression régulière atomique les quantifieurs utilisables sont les suivants : Dans ce tableau, la phrase « tout mot de n caractères vérifiant ⊗ » signifie exactement : « tout mot de n caractères appartenant à l’ensemble défini par l’expression régulière atomique ⊗ ». La notation {n,m} est générale mais lourde pour les cas simples, c’est pourquoi : * est utilisé à la place de {0,} + est utilisé à la place de {1,} ? est utilisé à la place de {0,1} Exemples abc § la chaîne abc a\. § la chaîne a. a. § a suivi de n’importe quel caractère a* § rien ou a ou aa ou aaa ou … a.* § a suivi de n’importe quelle chaîne (même vide) § (a ou ab ou abc …) a+ § a ou aa ou aa ou aaa ou … a? § rien ou a a{2} § la chaîne aa [a b]{2} § aa ou ab ou bb ou ba quantifieur signification ⊗* tout mot de 0 à N caractères vérifiant ⊗ ⊗+ tout mot de 1 à N caractères vérifiant ⊗ ⊗? tout mot de 0 à 1 caractère vérifiant ⊗ ⊗{n} tout mot de n caractères vérifiant ⊗ ⊗{n1,n2} tout mot de n1 à n2 caractères vérifiant ⊗ ⊗{n1,} tout mot d’au moins n1 caractères vérifiant ⊗ ⊗{,n2} tout mot de 0 à n2 caractères vérifiant.

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *