Sed - Tutoriel linux - Principe

Mise à jour : Debian 11.2 - Bullseye

Références :

Sommaire

1 - Installation

$ which sed
/usr/bin/sed

$ dpkg -S /usr/bin/grep
dpkg-query: aucun chemin ne correspond à /usr/bin/grep

$ find -L /bin -samefile /usr/bin/sed 2>/dev/null
/bin/sed

$ dpkg -S /bin/grep
grep: /bin/grep
$ sed --version |head -1
sed (GNU sed) 4.7
$ sed --help
$ man sed
$ info sed

2 - Principe

2.1 - Format

Le format d'une commande sed est du type 

$ cat <fichier> |sed <option> '<sélection_lignes> <commande><expression>'
$ cat test
Ligne
Ligne 2 UUID
Ligne 3

2.2 - Exemple Fonction Substitution

$ cat test |sed '1,2s/Ligne/LIGNE/'
LIGNE 1
LIGNE2 UUID
Ligne 3

2.3 - Guillemets

sed <options> "<sélection_lignes> <commande><expression>"
$ motif=def
$ remplacement=" 123 3

$ echo "abcdefghi" |sed "s/$motif/$remplacement/"
abc 123 ghi
$ echo 'abc$motifghi' |sed "s/\$motif/  \$remplacement/  "
abc $remplacement ghi

3 - Entrées - Sorties

3.1 - Entrées

$ cat test |sed '1,2 s/Ligne/LIGNE/'
LIGNE 1
LIGNE2 UUID
Ligne 3
$ sed '1,2 s/Ligne/LIGNE/' test
LIGNE 1
LIGNE 2 UUID
Ligne 3
$ sed '1,2 s/Ligne/LIGNE/' -
Ligne 1
LIGNE 1
Ligne 2
LIGNE 2
Ligne 3
Ligne 3

3.2 - Sorties

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

$ sed -i '2s/UUID/uuid/' test

$ cat test
Ligne 1
Ligne 2 uuid
Ligne 3

3.2.3  Enchaînement - option -e

$ cat test |sed -e '1,2 s/Ligne/LIGNE/' -e '3 s/Ligne/ligne/'
LIGNE 1
LIGNE 2 UUID
ligne 3
$ 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

sont recopiées sans modification sur la sortie

3.3.2 Suppression de l'affichage des lignes non modifiées - Option -n

$ 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

4.1 - Sélection par numéro de ligne et motif

$ cat test |sed '2,d'
Ligne3
$ cat test |sed '/UUID/ d'
Ligne 1
Ligne 3

4.2 - Sélection par intervalle

$ cat test |sed '1,2 d'
Ligne 3
$ cat test|sed '1,/UUID/ d'
Ligne 3
$ cat test |sed '/Ligne/UUID/d'
Ligne 3

4.3 - Sélection par première ligne et nombre de lignes

$ cat test |sed '1,+1 d'
Ligne 3
$ cat test |sed '/UUID/,+1 d'
Ligne 1

4.4 - Expressions régulières

5 - Délimiteur

5.1 - Délimiteur

sed /Ligne 1/,/UUID/ <fonction>
sed s /Motif/Remplacement/
$ sed 's/linux/debian/' sources.list

$ sed 's|linux|debian|' sources.list
$ sed -n '\|debian|p' sources.list2.2 

5.2 - Échappement du délimiteur

$ sed -e 's/\//*/' sources.list