LinuxInfo
Dezoom

Sed

Mise à jour : Debian 9.0

1 - Flux

1.1 - Flux d'entrées

sed peut-être utilisé

Exemple : Extraction des deux premières lignes du fichier /etc/apt/sources/list

$ sed -n '1,2p' /etc/apt/sources.list
# sources.list jessie
# miroir http://httpredir.debian.org/debian

Exemple : Extraction des deux premières lignes de la sortie de la commande lsmod

$ lsmod |sed -n '1,2p'
Module Size Used by
ctr 16384 2

1.2 - Flux de sorties

Sans option 	: sortie du résultat sur le périphérique standard
Option -e 	: enchaînement de commandes et sortie du résultat sur le périphérique standard si pas d'option supplémentaire

Exemple : Enchaînement de deux commandes : Remplacement du premier caractère de chaque ligne par **** et du dernier caractère par  $$$$ :

$ sed -e 's/^/***** /' -e 's/$/ $$$$$/' sources.list 
***** # jessie $$$$$
***** deb http://httpredir.debian.org/debian/ jessie main non-free contrib $$$$$
***** deb-src http://httpredir.debian.org/debian/ jessie main contrib $$$$$
Option -i 	: modification du fichier
Option -i.bak : modification du fichier après création d'un fichier de sauvegarde .bak

2 - Utilisation

2.1 - Substitutions (s)

Fichier d'origine : sources.list :

$ cat sources.list 
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
deb-src http://httpredir.debian.org/debian/ jessie main contrib
$ sed -e 's/debian/  ###  /' sources.list
# jessie
deb http://httpredir. ### .org/debian/ jessie main non-free contrib
deb-src http://httpredir. ### .org/debian/ jessie main contrib

$ sed -e 's/debian/  ###  /2' sources.list
# jessie
deb http://httpredir.debian.org/ ### / jessie main non-free contrib
deb-src http://httpredir.debian.org/ ### / jessie main contrib
$ sed -e 's/debian/  ###  /g' sources.list
# jessie
deb http://httpredir. ### .org/ ### / jessie main non-free contrib
deb-src http://httpredir. ### .org/ ### / jessie main contrib
$ sed -e 's/debian/ ### /2g' sources.list 
# jessie
deb http://httpredir.debian.org/ ### / jessie main non-free contrib
deb-src http://httpredir.debian.org/ ### / jessie main contrib
$ sed -e '3 s/debian/   ###   /g' sources.list
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
deb-src http://httpredir. ### .org/ ### / jessie main contrib
$ sed -e '1,2 s/debian/   ###   /g' sources.list
# jessie
deb http://httpredir. ### .org/ ### / jessie main non-free contrib
deb-src http://httpredir.debian.org/debian/ jessie main contrib
$ sed -e '/deb-src/s/debian/   ### /' sources.list
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
deb-src http://httpredir. ### .org/debian/ jessie main contrib

2.2 - Caractères réservés

2.2.1 Caractères spéciaux : ^ $ . * [ ]

	^       Premier caractère de la ligne
$      Dernier caractère de la ligne
.       N'importe quel caractère
*       Nombre quelconque (de 0 à N) de caractères
[]      N'importe quel caractère compris entre les crochets exemple : [a-g]
[[:xxx;]] N'importe quel caractère d'une classe :
[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]

Exemples :

$ sed -e 's/^/oupsss/' sources.list
oupsss# jessie
oupsssdeb http://httpredir.debian.org/debian/ jessie main non-free contrib
oupsssdeb-src http://httpredir.debian.org/debian/ jessie main contrib
$ sed -e 's/^.*main/oupsss/' sources.list
# jessie
oupsss non-free contrib
oupsss contrib

2.2.2 Échappement du délimiteur

Le délimiteur est généralement /. Pour pouvoir utiliser le caractère / comme un caractère standard

Exemple : remplacer / par "  ###  "

$ sed -e 's/\//  ###  /g' sources.list 
# jessie
deb http: ### ### httpredir.debian.org ### debian ### jessie main non-free contrib
deb-src http: ### ### httpredir.debian.org ### debian ### jessie main contrib

Exemple : remplacer / par "  ###  "

$ $ sed 's|/|  ###  |g' sources.list
# jessie
deb http: ### ### httpredir.debian.org ### debian ### jessie main non-free contrib
deb-src http: ### ### httpredir.debian.org ### debian ### jessie main contrib

2.2.3 - Utilisation de $ en expansion de paramètre

Remplacer l'apostrophe par le guillemet pour utiliser le $ en expansion de paramètre

$ Crypt=ssd
$ sed "s/test/$Crypt/" .....

2.2.4 - Reprise du motif : &

Utiliser & pour représenter le motif.

Remplacer debian par ***debian***

$ sed -e 's/debian/***&***/' sources.list
# jessie
deb http://httpredir.***debian***.org/debian/ jessie main non-free contrib
deb-src http://httpredir.***debian***.org/debian/ jessie main contrib

2.3 - Manipulation de lignes

2.3.1 Sélection (p)

$ sed -n '1,2p' sources.list
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib

Note : dans le cas de la commande p, l'option -n évite que chaque ligne soit affichée deux fois

$ sed -n '2,+2p' sources.list
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
deb-src http://httpredir.debian.org/debian/ jessie main contrib
$ sed -n '/#/,/deb http/p' sources.list
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
$ sed -n '/deb http/,//p' sources.list
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
deb-src http://httpredir.debian.org/debian/ jessie main contrib

2.3.2 Suppression (d)

$ sed '2,3d' sources.list
# jessie
$ sed '/backports/d' sources.list
...
$ sed -e '/#/,/deb http/d' sources.list
deb-src http://httpredir.debian.org/debian/ jessie main contrib

2.3.3 Insertion (i)

$ sed -e "3iInsertion d'une nouvelle ligne" sources.list 
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
Insertion d'une nouvelle ligne
deb-src http://httpredir.debian.org/debian/ jessie main contrib
$ sed -e "/deb-src/iInsertion d'une nouvelle ligne" sources.list
# jessie
deb http://httpredir.debian.org/debian/ jessie main non-free contrib
Insertion d'une nouvelle ligne
deb-src http://httpredir.debian.org/debian/ jessie main contrib