Langages IL - 2ème semestre
Transcription
Langages IL - 2ème semestre
Langages IL - 2ème semestre 6ème séance : familiarisation avec l’environnement Linux SED : Stream Editor Sommaire 1/ sed (stream editor) 2/ Exercices sur sed 1/ Introduction à sed Bien maîtriser les expressions régulières peut rendre inutile l'utilisation des logiciels d'édition des textes. Les éditeurs interactifs (comme Word ou Wordpad) sont puissants, mais ils ont aussi des limitations. Prenez pour illustration une situation dans laquelle vous devez effectuer des modifications similaires sur un groupe de fichiers - comme vous avez du faire pour 'nettoyer' vos corpus. Vous pouvez utiliser Notepad pour effectuer un nombre d'éditions de chaque fichier à son tour à la main (opération longue, répétitive et ennuyeuse). Mails il existe un meilleur moyen : utiliser sed. Sed est un éditeur de flux de caractères non interactif. Il peut éditer les données qu'il reçoit depuis l'entrée standard ou depuis un « pipe », c'est à dire en sortie d'une autre commande (cat fichier1 fichier2 | sed …). Vous n'avez donc pas besoin d'avoir les données sauvées dans un fichier pour pouvoir les éditer. sed fonctionne en effectuant toutes les opérations d'édition (des « commandes ») spécifiées par l'utilisateur sur la ligne de commande. Sed ne traite qu'une ligne à la fois. Ainsi, les commandes seront appliquées sur chaque ligne, dans l'ordre. Il écrit le résultat sur la sortie standard (stdout) puis passe à la ligne suivante. NOTE : Aucun fichier envoyé en entrée n'est modifié. La ligne de commande pour invoquer sed est sed [-n] [-e commande] [-f edfile] [input_file] SUBSTITUTIONS sed "s/UNIX/Linux/g" fichier > fichier.nouveau Cette ligne de commande traite fichier ligne par ligne remplaçant (s comme substitute) chaque occurrence du motif UNIX par Linux. L'option g (globally) indique à la commande sed que, si plusieurs occurrences du motif UNIX apparaissent sur la même ligne, elles devront toutes être substituées. Par défaut la sortie de la commande est affichée à l'écran. Dans cet exemple elle est redirigée dans fichier.nouveau à l'aide de l'opérateur de redirection >. Par défaut, toutes les lignes de fichier sont affichées dans la sortie même si elles n'ont pas été affectées par la modification. L'option -n supprime cette option par défaut et n'affiche qu'un nombre de lignes spécifiées. sed -n "s/UNIX/Linux/g" fichier n'affichera rien à l'écran, cas on n'a spécifié que le changement qu'on veut effectuer, mais pas la sortie. En utilisant l'option p (print) en même temps que g on pourra n'afficher que les lignes affectées par la substitution : sed -n "s/UNIX/Linux/gp" fichier L'option -e est nécessaire lorsqu'on veut effectuer plusieurs commandes d'édition : sed -e "s/UNIX/Linux/g" -e "s/key/KEY/gp" fichier Lorsqu'on veut effectuer plusieurs fois la même opération (ici la substitution), on peut obtenir le même résultat comme ceci : sed -e "s/UNIX/Linux/g ; s/key/KEY/gp" fichier Exercice 1 : en utilisant l'expression régulière découverte dans le devoir précédent sur la commande grep, écrire la commande sed permettant d'effacer toutes les balises d'un fichier html. EFFACER DES LIGNES La commande d permet d'effacer certaines lignes du fichier. L'adresse des lignes à effacer peut être définie o soit en utilisant une expression régulière : sed -e '/regexp/d' /chemin/d/acces/de/mon/fichier | more o soit en indiquant le numéro des lignes à effacer : sed -e 'no-ligned' /chemin/d/acces/de/mon/fichier o soit en indiquant le numéro des lignes à effacer : Ainsi : sed -e '/^#/d' fichier permet de ne pas afficher les lignes de fichier commençant par le caractère # sed -e '/^\t/d' fichier permet de ne pas afficher les lignes de fichier commençant par un tab sed -e '1d' fichier permet de ne pas afficher la première ligne de fichier sed -e '1,10d' fichier permet de ne pas afficher les 10 premières lignes d'un fichier. Exercice 2 : obtenir le même résultat que les deux commandes précédentes en utilisant une autre commande étudiée lors des séances 1-3. Exercice 3 : compléter la commande sed décrite dans l'exercice 1 de façon à o effacer les caractères tab ou espace en début de ligne o effacer les caractères tab ou espace en fin de ligne o effacer les lignes vides On peut combiner des contraintes sur les lignes à modifier dans le texte et l’expression qu’on veut remplacer. Par exemple, sed -e '1,10s/enchantment/entrapment/g' test.txt Va remplacer le toutes les occurrences du mot enchantment par entrapment, et ceci dans les lignes 1 à 10 du texte test.txt. Exercice 4 : à l’aide de la commande grep extraire toutes les lignes de votre corpus en français contenant du texte entre parenthèses, puis en combinant avec une commande sed, construire un fichier ne comportant que le texte compris entre parenthèses. Pourriez-vous faire la même chose en utilisant uniquement la commande sed. Quelques commandes sed très utiles : sed = nom_du_fichier | sed 'N;s/\n/\t/' - permet de numéroter (N) les lignes d’un fichier. Les numéros de ligne seront ici séparés des lignes par un tab. Que permettent de faire es commandes suivantes ? sed 's/^[ \t]*//' sed 's/[ \t]*$//' sed 's/^[ \t]*//;s/[ \t]*$//' sed -e :a -e 's/^.\{1,78\}$/ &/;ta' sed -e :a -e 's/^.\{1,77\}$/ & /;ta'