La commande sed
Présentation
La commande sed (stream editor) est un éditeur de texte non interactif. Elle permet d’automatiser le traitement de fichiers texte. Ce chapitre présente les principales fonctionnalités de la commande.
Utilisation de la commande sed
Syntaxe de base
sed [-n] action [ fic1 ... ]
sed [-n] -e action1 [ -e action2 ... ] [ fic1 ... ]
sed -f script-sed [ fic1 ... ficn ]
Les actions spécifiées seront exécutées sur chaque ligne du fichier. Le résultat du traitement est affiché sur la sortie standard. Si plusieurs actions sont spécifiées sur la ligne de commande, chacune doit être précédée de l’option -e.
La commande sed ne modifie pas le fichier d’origine.
Syntaxe d’une action
[adresse[,adresse]]commande[arguments]
Une action est syntaxiquement composée de :
-
une partie adresse qui permet de spécifier sur quelles lignes doit s’effectuer la commande ;
-
la commande à exécuter ;
-
les arguments de la commande.
Syntaxe d’une adresse
Type d’adresse |
Lignes traitées |
Aucune adresse |
Toutes les lignes. |
Adresses de type 1 |
|
n |
Ligne n. |
$ |
Dernière ligne. |
/ERb/ |
Lignes correspondant à l’expression régulière. |
Adresses de type 2 |
|
n1,n2 |
Ligne n1 jusqu’à ligne n2. |
/ERb1/,/ERb2/ |
La première ligne traitée sera la première trouvée correspondant à ERb1. Le traitement se poursuivra sur toutes les lignes jusqu’à ce que sed rencontre une ligne correspondant à ERb2. Cette dernière sera également traitée. |
Syntaxe de la commande
Commande |
Argument |
Type d’adresse supporté (maximum) |
Signification |
d |
Aucun |
2 |
Ne pas afficher les lignes spécifiées (delete). |
p |
Aucun |
2 |
Afficher à l’écran les lignes spécifiées (print). |
s |
/erb/remplacement/[g] |
2 |
Effectuer une substitution sur les lignes spécifiées (substitute). |
w |
fichier |
2 |
Écrire les lignes spécifiées dans un fichier (write). |
= |
Aucun |
1 |
Afficher le numéro de la ligne spécifiée.... |
Exemples
1. Utilisation de sed en ligne de commande
Voici le contenu du fichier qui sera utilisé dans les exemples ci-dessous :
$ cat tel2.txt
Joyeux Giselle|12. rue de la Source|89290|Vaux|03.45.26.28.47
Dehaut Olivier|3 rue de Pussenval|75020|Paris|01.78.25.96.78
Karama Josette|256 rue de la tempete|56100|Lorient|02.85.26.45.58
Zanouri Joel|45/48 boulevard du Gard|56100|Lorient|02/85/56/45/58
Gron Pierre|89-90 rue du chateau|38350|La Mure|04.78.21.23.69
Grival Zoe|3, rue du chateau|38350|La Mure|04.78.21.78.69
$
a. La commande d (delete)
La commande d permet de ne pas afficher à l’écran les lignes sélectionnées par la partie adresse.
Exemple
Ne pas afficher les lignes blanches :
$ sed '/ˆ[\t]*$/d' tel2.txt
ou
$ sed '/^[[:blank:]]*$/d' tel2.txt
Joyeux Giselle|12. rue de la Source|89290|Vaux|03.45.26.28.47
Dehaut Olivier|3 rue de Pussenval|75020|Paris|01.78.25.96.78
Karama Josette|256 rue de la tempete|56100|Lorient|02.85.26.45.58
Zanouri Joel|45/48 boulevard du Gard|56100|Lorient|02/85/56/45/58
Gron Pierre|89-90 rue du chateau|38350|La Mure|04.78.21.23.69
Grival Zoe|3, rue du chateau|38350|La Mure|04.78.21.78.69
$
Une ligne blanche peut être une ligne vide ou une ligne contenant une suite d’espaces ou de tabulations. L’expression [:blank:] représente un caractère espace ou tabulation (cf. chapitre Annexes - Classes de caractères POSIX).
b. La commande p (print)
La commande p permet d’afficher à l’écran les lignes sélectionnées par la partie adresse. Par défaut, sed affiche également tout le contenu du fichier. Pour modifier ce comportement, il faut utiliser l’option -n.
Exemple
Afficher...
Exercices
Les fichiers fournis pour les exercices sont disponibles dans le répertoire dédié au chapitre sous l’arborescence Exercices/fichiers.
1. Expressions régulières
a. Exercice 1 : insertion de balises dans un fichier
Soit le fichier dates_cours.txt :
$ cat dates_cours.txt
unix
28-30 jan
17-19 juin
18-20 nov
shell
23 mars
15 juil
7 sep
À l’aide la commande sed, transformez ce fichier comme ceci :
unix
<date>28-30 jan</date>
<date>17-19 juin</date>
<date>18-20 nov</date>
shell
<date>23 mars</date>
<date>15 juil</date>
<date>7 sep</date>
b. Exercice 2 : formatage de fichier
Récupérer le fichier .bash_profile (fourni). Afficher ce fichier avec la commande nl, qui numérote les lignes :
$ nl .bash_profile
1 # .bash_profile
2 # Get the aliases and functions
3 if [ -f ~/.bashrc ]; then
4 ~/.bashrc
5 fi
6 # User specific environment and startup programs
7 PATH=$PATH:$HOME/bin
1. |
Retirer les espaces qui précèdent les numéros de ligne. |
1 # .bash_profile
2 # Get the aliases and functions
3 if [ -f ~/.bashrc ]; then
4 . ~/.bashrc
5 fi
6 #...