Sed Tout Puissant

Rédigé par Paulo Aucun commentaire
Classé dans : Bash Mots clés : sed

Sed (abréviation de Stream EDitor, « éditeur de flux ») est, comme awk, un programme informatique permettant d'appliquer différentes transformations prédéfinies à un flux séquentiel de données textuelles.
Source Wikipedia

Après Vi , voici Sed tout puissant : un autre utilitaire qui peut faire des "trucs sympas"  en ligne de commande.

Tout d'abord, un petit rappel sur l'utilisation de la commande :
#sed -e : permet le passage de commande sur une seule ligne
#sed -f : permet le passage de commande avec un fichier en entrée
#sed -i : modification directement sur le fichier

Voici une suite d'exemples qui montre succinctement la puissance de l'utilitaire "sed" :
 

#affiche les lignes qui commencent par dièse (avec un embryon de regexp : caractère "^" qui
# se positionne sur le début de la ligne)
sed -n '/^#/p' fichier.txt

#dans le même genre (mais en plus violent...) suppression de commentaire dans un fichier 
# (avec "^#" pour la selection/positionnement de la ligne  et "d" pour la supprimer)
sed '/^#/d' fichier.txt

#la transliteration (là, ça le fait peut-être un peu trop...) ligne de commande qui permet 
# de supprimer tous les accents indésirables dans un fichier...
sed -i fichier.txt -e 'y/éèê/eee/

#dans tous les fichiers du répertoire courant, remplace tous les "e" en "b" (ouah,
# super utile ça...) mais en faisant une sauvegarde du fichier en .bak
#    ( et ça, c'est plutot pas mal !)
for f in in $(ls);do
sed -i.bak -e 's/e/b/' $f
done

#renomme tous les fichiers .JPG (pas bien !) en *.jpg (bien !)
for f in in $(ls *.JPG);do
   fn=$(echo $f|sed 's/JPG/jpg/')
   mv $f $fn
done

# ajoute le contenu du fichier truc.list aprés la ligne '#####TEST#####'
#        dans le fichier monFic.txt
sed -i "/^#####TEST#####$/r /tmp/truc.list" monFic.txt

#un petit dernier pour la route : suppression de tous les caractères
#     spéciaux d'un fichier "pourri" de type "fenètre"...
cat ficPourri.log|sed  -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g">ficOK.log

#

 

Sed, les sous-expressions :
source : https://www.commentcamarche.net/faq/9559-sed-introduction-a-sed-part-ii
Une sous-expression est une partie d'une expression régulière, encadrée par des parenthèses, que l'on souhaite réutiliser dans la chaîne de remplacement. Les parenthèses doivent être elles-mêmes protégées par des backslashes, à moins que l'option "-r" ait été employée.
 

# dernieres lignes du fichier d'exemple
cat exemple.csv
   710;02:37:40;JOURNET Nathalie;V2F;F;Saint Cassien$
   711;02:37:42;JOURNET Philippe;V2H;H;Saint Cassien$
   712;02:38:00;CASTAGNET Philippe;V2H;H;Sanary sur Mer$
   713;02:38:44;MOUSSET Cathy;SEF;F;Maddingley$

# extraction de certains champs avec sed -r  ( afin d'eviter de protégér les sous-chaines)
# - premier   champ : numerique uniquement de 1 à 3 caracteres finissant par un ;
# - deuxieme  champ : 8 caractères et un ;
# - troisieme champ : lettre en majuscule uniquement (de 1 à 20)
cat exemple.csv |sed -r 's:([0-9]{1,3};)(........)(;[A-Z]{1,20} )(.*$):\1 --- \2 --- \3:'
   710; --- 02:37:40 --- ;JOURNET
   711; --- 02:37:42 --- ;JOURNET
   712; --- 02:38:00 --- ;CASTAGNET
   713; --- 02:38:44 --- ;MOUSSET




C'est tout pour le moment !
Sed offre tout plein de possibilité : a vous de les découvrir :)
ici : https://fr.wikipedia.org/wiki/Stream_Editor
ou là : http://www.siteduzero.com/informatique/tutoriels/la-commande-sed
et encore https://www.commentcamarche.net/faq/9559-sed-introduction-a-sed-part-ii

Les commentaires sont fermés.