10 févr. 2016

[LINUX] Substitution avec sed

Article intéressant sur la substitution avec sed, c'est assez puissant si on veut apporter des
modifications sur un fichier très volumineux.
On peut remplacer une ligne par une autre, un mot par un autre, des minuscules par des majuscules et vis versa.

Substitution basique

Simple

- 1ère occurrence (de chaque ligne) rencontrée uniquement
sed 's/la/LA/' fichier.txt

Globale

- Toutes les occurrences (de chaque ligne) rencontrées
sed 's/la/LA/g' fichier.txt

Ciblée

- Seulement la 2ème occurrence (de chaque ligne) rencontrée
sed 's/la/LA/2' fichier.txt

Substitution conditionnée

Simple

/Motif/ - Uniquement si la ligne contient "motif"
sed '/awk/ s/sed/SED/' fichier.txt
Numéro de ligne - Uniquement la ligne n° "N"
sed '18 s/sed/SED/' fichier.txt
/Regex/ - Uniquement s'il y a correspondance avec l'expression régulière
sed '/^[ ][Ss]ed/ s/ed/ED/g' fichier.txt

Avancée

0,/regex/ - Uniquement la 1ère occurrence rencontrée
sed '0,/sed/ s//SED/' fichier.txt

Bloc

/motif1/,/motif2/ - Uniquement dans l'intervalle "motif1 - motif2"
sed '/Début/,/Fin/ s/ed/ED/' fichier.txt # 1ère occurrence uniquement
sed '/Début/,/Fin/ s/ed/ED/g' fichier.txt # toutes les occurrences
8,13 - Uniquement dans l'intervalle des lignes 8 à 13
sed '8,13 s/ed/ED/g' fichier.txt
On peut aussi combiner motif et ligne
sed '8,/Fin/ s/ed/ED/g' fichier.txt
sed '/Début/,13 s/ed/ED/g' fichier.txt
Ou encore avec des "regex"
sed '/Début/,$ s/ed/ED/g' fichier.txt # jusqu'à la fin ($)
sed '/^[ ][Ss]ed/,13 s/ed/ED/' fichier.txt

Avancée

Substituer tout un texte entre 2 motifs en excluant les motifs
sed  '/Début/,/Fin/{ /Début/b;/Fin/b; s/.*/SED - The Stream ÉDitor/; }' fichier.txt

Aucun commentaire:

Enregistrer un commentaire