User Tools

Site Tools


notes:sed-trucs-et-astuces

Sed - Trucs et astuces

La commande SED sous UNIX signifie éditeur de flux (Stream EDitor) et peut effectuer de nombreuses fonctions sur des fichiers comme la recherche, la recherche et le remplacement, l'insertion ou la suppression. Bien que l'utilisation la plus courante de la commande SED sous UNIX soit pour la substitution ou pour rechercher et remplacer. En utilisant SED, on peut éditer des fichiers même sans les ouvrir, ce qui est un moyen beaucoup plus rapide de trouver et de remplacer quelque chose dans un fichier, que d'ouvrir d'abord ce fichier dans VI Editor, puis de le modifier.

  • SED est un puissant éditeur de flux de texte. Peut faire l'insertion, la suppression, la recherche et le remplacement (substitution).
  • La commande SED sous Unix prend en charge les expressions régulières qui lui permettent d'effectuer des correspondances de modèles complexes.

Substitution

Substitution basique

Substituer “foo” par “bar” à chaque ligne

  • Seulement la 1ère occurrence
sed 's/foo/bar/'
  • Seulement la 3ème occurrence
sed 's/foo/bar/3'
  • Toutes les occurrences
sed 's/foo/bar/g'
  • Seulement l'avant dernière occurrence
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'
  • Seulement la dernière occurrence
sed 's/\(.*\)foo/\1bar/'
Prise en compte de la casse

Substituer “Foo” ou “foo” par “bar” à chaque ligne

sed 's/[Ff]oo/bar/g'
Substitution multiple

Substituer “bleu” ou “blanc” ou “rouge” par “vert”

sed 's/bleu\|blanc\|rouge/vert/g'
Substituer sous contition

Substituer “foo” par “bar” seulement les lignes contenant “plop”

sed '/plop/ s/foo/bar/g'

Substituer “foo” par “bar” excepté les lignes contenant “plop”

sed '/plop/! s/foo/bar/g'

Affichage

Utilisation de la position de la ligne

La 1ère ligne (head -1)

sed q

Les 5 premières lignes (head -5)

sed '5q'
sed '1,5!d'

La dernière ligne (tail -1)

sed -n '$p'
sed '$!d"

Les 5 dernières lignes (tail -5)

sed -e :a -e '$q;N;6,$D;ba'

Les 2 dernières lignes (tail -2)

sed '$!N;$!D'
Utilisation d'un motif de recherche

Seulement les lignes matchant un motif ou une expression régulière

sed -n '/motif/p'
sed '/regexp/!d'

Seulement les lignes ne matchant pas un motif ou une expression régulière

sed -n '/motif/!p'
sed '/regexp/d'

La ligne précédent un motif ou une expression régulière

sed -n '/motif/{g;1!p;};h'

La ligne suivant un motif ou une expression régulière

sed -n '/regexp/{n;p;}'

Suppression

Éliminer les espaces et tabulations

En début de ligne

sed 's/^[ \t]*//
sed 's/^\s*//'				# Utilisation du paramètre "\s"

En fin de ligne

sed 's/[ \t]*$//'

En début et fin de ligne

sed 's/^[ \t]*//;s/[ \t]*$//'
Éliminer les lignes vides

Toutes les lignes vides

sed '/^$/d'
sed '/./!d'

Uniquement celles d'en tête

sed '/./,$!d'
sed -nr '/./,$s/(.*)/\1/p'

Uniquement celles de fin

sed -e :a -e '/^\n*$/ {$d;N;ba' -e '}'
Éliminer une ligne à intervalles réguliers

Toutes les lignes paires

sed '1~2d'

Toutes les lignes impaires

sed '2~2d'

Toutes les n lignes à partir de la ligne n

sed '3~2d'				# Toutes les 2 lignes à partir de la ligne 3

Divers

Joindre les lignes

Joindre les lignes 2 par 2

sed '$!N;s/\n//'

Joindre les lignes 3 par 3

sed '$!N;s/\n//;$!N;s/\n//;'
Ajout de lignes

Si une ligne se termine par un backslash (), ajouter la ligne suivante et remplacer la fin de ligne (\n) par un espace

sed -e :a -e '/\\$/N; s/\\\n/ /; ta'

Si une ligne commence par un signe égale (=), ajouter-là à la ligne précédente et remplacer le signe égale (=) par un espace

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

Affichage insensible à la casse

(Afficher uniquement les lignes correspondant à un motif donné avec insensibilité à la casse)

La commande “sed” possède bien un “flag” - voir Sed - Introduction à SED - Part I - permettant de mettre en correspondance un motif sans tenir compte de la casse, mais ce flag ne s'applique qu'à la seule commande de substitution (commande s) malheureusement.

Voilà donc une astuce permettant de se servir de ce flag pour afficher (ou au contraire ne pas afficher) des lignes correspondant à un motif donné sans tenir compte de sa casse. Il suffit pour cela d'employer la commande de substitution “s” combinée au métacaractère “&” et bien sur du flag “I”.

Exemple pour n'afficher que les lignes contenant le terme “motif” (ou Motif, MOTIF, mOtIf, MoTiF, etc)

sed -n 's/motif/&/Ip' fichier
notes/sed-trucs-et-astuces.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1