Dernière modification : 24/08/2022

Commande SED - Mémo

 

La commande sed "Stream EDitor" permet de transformer des chaînes de caractères ou une sélection une portion de ligne.

Pour de plus amples informations sur l'utilisation de la commande sed, je vous renvoie au manuel https://linux.die.net/man/1/sed ou encore http://manpagesfr.free.fr/man/man1/sed.1.html

Ci-dessous une liste d'exemple de cas d'utilisation de la commande sed.

 

Fichier d'exemple :

1902 aaaaaaaaaa 
2002 bbbbbbbbbb 

 

1. Ne pas afficher les lignes contenant les caractères de a à k (en minuscule)

sed '/[a-k]/d' fic.txt

Utilisation du "d" pour "Delete" line.

2. Afficher la 4ème ligne seulement

sed -n 4p fic.txt

3. Afficher les lignes de 1 à 5

sed -n '1,5p' fic.txt

Sans l'option "-n" sed afficherait en double les lignes 1 à 5. L'option "-p" permet d'afficher les lignes (print) qui nous intéressent uniquement.

4. Afficher la dernière ligne d'un fichier

sed -n -e '$p' fic.txt

5. Écriture dans un fichier du filtre

sed -n -e '/2[0-9]\{3\}/w annee2' -e '/1[0-9]\{3\}/w annee1' fic.txt

L'option "-e" est pour l'ajout du script. Ici nous extrayons les années 2XXX dans un fichier et les années 1XXX dans un autre fichier. Sed fonctionne ici comme un filtre. Le "w" est pour lui dire d'écrire le résultat dans le fichier qui suit.

6. Négation d'une commande

On écrit ici le contraire de la commande, vrai devient faux et inversement. Exemple avec la commande précédente :

sed -n -e '/2[0-9]\{3\}/!w annee2' -e '/1[0-9]\{3\}/!w annee1' fic.txt

On remarquera que les contenues des fichiers sont donc inversés.

7. Supprimer tous les espaces à la fin de toutes les lignes

sed -e 's/ *$//' fic.txt

8. Supprimer toutes les lignes vides d'un fichier

sed -e '/^$/d' fic.txt

9. Supprimer toutes les lignes contenant un motif

sed -e '/MOTIF/d' input.txt

10. Commande de substitution

10.1 Afin de remplacer une chaîne de caractères par une autre, utiliser la commande suivante :

sed -e 's/1/X/g' fic.txt | sed -n '/X/p'

Ici, on remplace tous les 1 par des X. Si la commande "g" n'est pas présente, alors, il n'y aurait qu'une seule substitution par ligne. On peux remplacer "g" par 3 pour ne remplacer que les 3 premières substitutions par lignes au maximum par exemple.

10.2 Une sous expression est caractérisée par \(  LA RECHERCHE  \).

sed 's/\([0-9]\{4\}\)/|\1|/' fic.txt

Affichera les dates avec des "|" avant et après. Les caractères spéciaux \1 à \9 correspondent aux sous-expressions.

10.3 L'utilisation du "&" correspond à toute la ligne. Rajout des "|" sur toute la ligne

sed 's/.*/|&|/' fic.txt

10.4 N'afficher que les dates

sed 's/\([0-9]\{4\}\).*/\1/' fic.txt

11. Substitue toutes les instances contenant un motif en laissant le reste de la ligne tel quel

sed -e 's/MOTIF//g' fic.txt

12. Remplacer MOTIF par MOTIF2

sed -e 's/MOTIF/MOTIF2/g' fic.txt

 

Plus d'exemple ici : ici ou ici