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'

Documents pareils