pense-bête de bruno sanchiz

Accueil > Linux > Lignes de commandes > sed

sed

Publié le 27 janvier 2023, dernière mise-à-jour le 14 décembre 2025, > 29 visites, >> 186547 visites totales.

sed permet de manipuler les contenus de fichiers

Pour essayer les commander sur un fichier , taper cat ( ou head, tail ) fichier |sed ...

Pour appliquer le changement au fichier, taper sed .... -i fichier

ATTENTION : l’utilisation de la guillemet simple ou double change les résultats.

La fonction de substitution s

sed "s/toto/TOTO/" : remplace toto par TOTO
sed "s/toto/TOTO/3" : remplace le 3ème toto par TOTO
sed "s/toto/TOTO/g" : remplace tous les toto par TOTO
sed "s/toto/TOTO/p" : remplace tous les toto par TOTO
sed "s#b#uu#w /tmp/hh" : remplace b par uu et écrit la ligne changée dans /tmp/hh
sed "s#b#uu#w /tmp/hh" : remplace tous les b par uu et écrit la ligne changée dans /tmp/hh

La fonction de suppression d

sed "1,2d" fichier : supprime les lignes 1 à 2 comprises
sed '1,2!d' fichier : supprime tous les lignes sauf 1 à 2 comprises
sed "/b/d" fichier : supprime les lignes contenant b
sed '/b/l' fichier : affiche les lignes avec les caractères de contrôle ( par exemple $ à la fin de la ligne contenant b mais pas \n )

Les fonctions q, r et w

La fonction q (quit) va interrompre l’exécution de sed, la ligne en cours de traitement est affichée sur la sortie standard (uniquement si -n n’a pas été utilisée).

La fonction r (read) lit le contenu d’un fichier et écrit le contenu sur la sortie standard.

La fonction w (write) écrit la ligne sélectionnée dans un fichier.

Les fonctions a et i

La fonction a (append) va placer un texte après la ligne sélectionnée.
sed '/b/a45' fichier ajoute une ligne 45 après la ligne contenant b

La fonction i (insert) va placer un texte avant la ligne sélectionnée
sed '/b/i45' fichier ajoute une ligne 45 avant la ligne contenant b

sed -f fichier_sed fichier

utilise les commandes du fichier_sed

séparer deux commandes : ;

cat fichier |sed '=;iblah'
1
blah
aaaa
2

utiliser la ligne suivante au motif :n

cat fichier2|sed -e '/fichier2ligne1/{n; s/i/A/g}'
fichier2ligne1
fAchAer2lAgne2

ajouter la ligne suivante au motif : N

cat fichier2|sed -e '/fichier2ligne1/{N; s/i/A/g}'
fAchAer2lAgne1
fAchAer2lAgne2

substitution :s

  • substitution du deuxième i : echo fichier |sed 's/i/A/2'
    fichAer

numéroter les lignes : =

cat fichier |sed '='

1
aaaa
2
...

ajouter du texte avant chaque ligne : i

cat fichier |sed 'iblah'
blah
aaaa
blah
...

ajouter du texte après chaque ligne : a

cat fichier |sed 'ablah'
aaaa
blah
bbbb
...
ajouter fichier2 après chaque ligne : r
cat fichier |sed 'rfichier2'
aaaa
fichier2ligne1
fichier2ligne2
bbbb

ajouter fichier2 ligne par ligne après chaque ligne : R
cat fichier |sed 'Rfichier2'
aaaa
fichier2ligne1
bbbb
fichier2ligne2

enlever les lignes vides d’un fichier

sed -i '/^$/d' b1.md5

Remplacer les fins de lignes par #

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/#/g' fichier : ne remplace pas la dernière ligne
while read line; do printf "%s" "$line#"; done < fichier :remplace aussi la dernière ligne
while read line; do echo -n "$line#"; done  < fichier :remplace aussi la dernière ligne

[bruno sanchiz]