Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Programmation shell sous Unix/Linux
  3. La commande sed
Extrait - Programmation shell sous Unix/Linux ksh, bash, norme POSIX (avec exercices corrigés) (7e édition)
Extraits du livre
Programmation shell sous Unix/Linux ksh, bash, norme POSIX (avec exercices corrigés) (7e édition)
2 avis
Revenir à la page d'achat du livre

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

Le symbole "images/symbol.PNG" utilisé dans les exemples représente la touche [Espace].

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 '/ˆ[images/symbol.PNG\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        #...