<fichier> est le fichier d'entrée contenant les
données à "éditer". Dans ce document, on prend comme exemple
le fichier test contenant les trois lignes suivantes
$ cat test Ligne Ligne 2 UUID Ligne 3
<option> est une liste d'options facultative parmi -n,
-e, -i, -E
<commande> est une lettre (p,a,i,r,s,q,l, ..),
éventuellement un caractère (=) désignant une commande de sed,
les fonctions sont décrites dans le document Sed -
Tutoriel linux - Commande
<sélection_lignes> est une valeur ou un couple de
valeurs définissant les lignes concernées par la fonction, si
<sélection_ligne> est absent, par défaut toutes les
lignes du fichier d'entrée seront sélectionnées
<expression> est un champ éventuellement vide propre à
la fonction
2.2
- Exemple Fonction Substitution
Dans l'exemple ci-dessous,
le fichier source est test
les lignes 1 à 2 sont sélectionnées
la commande est s (substitution)
le champ expression est /Ligne/LIGNE/ et contient deux
champs,
le premier champs (Ligne) contient le motif à rechercher
le deuxième champs (LIGNE) contient la chaîne de
caractères de substitution
$ cat test |sed '1,2s/Ligne/LIGNE/' LIGNE 1 LIGNE2 UUID Ligne 3
2.3
- Guillemets
Des guillemets (simples ou doubles) englobant l'expression
qui suit sed et ses options sont recommandés, afin de
contrôler l'expansion de la ligne de commande
sed <options> "<sélection_lignes> <commande><expression>"
Lorsque les guillemets simples sont utilisées, aucun
paramètre n'est expansé
Lorsque des guillemets doubles sont utilisés
Le $ est expansé. Dans l'exemple ci-dessous, la chaîne
de caractères $val, émise par echo, est reconnue et
remplacée
$ cat test |sed '1,2 s/Ligne/LIGNE/' LIGNE 1 LIGNE2 UUID Ligne 3
en lecture de fichier
$ sed '1,2 s/Ligne/LIGNE/' test LIGNE 1 LIGNE 2 UUID Ligne 3
en lecture de l'entrée standard
$ sed '1,2 s/Ligne/LIGNE/' - Ligne 1 LIGNE 1 Ligne 2 LIGNE 2 Ligne 3 Ligne 3
3.2
- Sorties
La sortie de sed est dirigée selon l'option utilisée
sur la sortie standard
sur le fichier d'entrée
sur une autre expression sed
Ces différents cas sont détaillées ci-dessous
3.2.1
Sortie standard
Par défaut, la sortie de sed est dirigée sur la sortie
standard, le fichier d'entrée n'est pas modifié. Exemple,
remplacement de UUID par uuid dans la ligne 2 du fichier test
ci-dessus
$ sed '2s/UUID/uuid/' test LIGNE 1 LIGNE2 uuid Ligne 3
$ cat test LIGNE 1 LIGNE2 UUID Ligne 3
3.2.2
Modification du fichier d'entrée - option -i
L'option -i est utilisée pour appliquer directement les
modifications au fichier d'entrée. Le contenu du fichier est
équivalent à celui qui aurait été affiché sur la sortie
standard par la commande sed équivalente. Par exemple,
remplacement de UUID par uuid dans la ligne 2
$ sed -i '2s/UUID/uuid/' test
$ cat test Ligne 1 Ligne 2 uuid Ligne 3
3.2.3
Enchaînement - option -e
L'option -e permet d'enchaîner les expressions de sed
$ cat test |sed -e '1,2 s/Ligne/LIGNE/' -e '3 s/Ligne/ligne/' LIGNE 1 LIGNE 2 UUID ligne 3
Les options -e et -i peuvent être combinées pour appliquer
les modifications au fichier source
$ sed -i -e '1,2 s/Ligne/LIGNE/' -e '3 s/Ligne/ligne/' test
$ cat test LIGNE 1 LIGNE 2 UUID ligne 3
3.3
- Contenu de la sortie
3.3.1
Cas général
sed traite de la première à la dernière ligne, chaque ligne
du fichier d'entrée
Les lignes
qui ne font pas partie de la sélection, définie par
<sélection_lignes> (voir ci-dessous)
ou qui ne sont pas concernées par
<commande><expression>
sont recopiées sans modification sur la sortie
Les lignes concernées par <commande><expression>
sont affichées après prise en compte de la commande (Voir Sed -
Tutoriel linux - Commandes )
3.3.2
Suppression de l'affichage des lignes non modifiées - Option -n
L'option -n supprime l'affichage
des lignes non modifiées / non concernées par la fonction
et les lignes modifiées par la commande de substitution
(s), sauf en cas d'utilisation du flag p
$ sed 's/UUID/uuid' test Ligne 1 Ligne 2 uuid Ligne 3
$ sed -n 's/UUID/uuid/' test
$ sed -n 's/UUID/uuid/p' test Ligne 2 uuid
4
- Sélection des lignes
Les lignes peuvent être sélectionnés
au moyen de numéro de ligne
au moyen d'un motif
au moyen d'intervalles définis par
première ligne - dernière ligne
ou première ligne et nombre de lignes
si aucune ligne ou intervalle n'est désignée, par défaut,
toutes les lignes seront sélectionnées
4.1
- Sélection par numéro de ligne et motif
Exemple1 : suppression de la ligne numéro 2
$ cat test |sed '2,d' Ligne3
Exemple 2 : suppression de toutes les lignes correspondant
au motif UUID
$ cat test |sed '/UUID/ d' Ligne 1 Ligne 3
4.2
- Sélection par intervalle
Exemple 1 : suppression des lignes 1 à 2
$ cat test |sed '1,2 d' Ligne 3
Exemple 2 : suppression des lignes 1 à la première
occurrence du motif UUID
$ cat test|sed '1,/UUID/ d' Ligne 3
Exemple 3 : suppression entre
la première occurrence du premier motif (ici Ligne)
la première occurrence du deuxième motif (ici UUID) à
partir de la ligne de départ définie ci-dessus
$ cat test |sed '/Ligne/UUID/d' Ligne 3
4.3
- Sélection par première ligne et nombre de lignes
Exemple 1 : suppression de 1 ligne à partir de la ligne 1
$ cat test |sed '1,+1 d' Ligne 3
Exemple 2 : suppression de 1 ligne à partir de la ligne
correspondant à la première occurrence du motif UUID à
Dans les spécifications de ligne, pour délimiter chaque
motif, par exemple
sed /Ligne 1/,/UUID/ <fonction>
Dans la commande de substitution, pour délimiter les
motifs de recherche et de remplacement, par exemple
sed s /Motif/Remplacement/
Le délimiteur standard est le slash "/", mais tout autre
caractère (non réservé, ni utilisé par ailleurs dans
l'expression), peut-être utilisé, par exemple | ou : ou #
.....
Dans le cas des commande de substitution s/, le remplacement
est direct, par exemple les deux lignes suivantes sont
identiques
$ sed 's/linux/debian/' sources.list
$ sed 's|linux|debian|' sources.list
Dans le cas des commandes autres que celles de substitution,
utiliser le caractère d'échappement standard "\" devant le
premier séparateur. Par exemple
$ sed -n '\|debian|p' sources.list2.2
5.2
- Échappement du délimiteur
Pour pouvoir utiliser le caractère du délimiteur / comme un
caractère standard à l'intérieur de sed
soit utiliser un autre délimiteur (voir ci-dessus)
soit échapper le caractère avec le caractère d'échappement
"\". Exemple : Remplacer dans l'expression, le caractère /
par *