3
Merci

Quelques mots de remerciements seront grandement appréciés.

Sed - Trucs et astuces




Substitution

  • 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/'
    • 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'
    • Substituer "Foo" ou "foo" par "bar" à chaque ligne
      • sed 's/[Ff]oo/bar/g'
    • Substituer "bleu" ou "blanc" ou "rouge" par "vert"
      • sed 's/bleu\|blanc\|rouge/vert/g'

Affichage

  • 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'
  • 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


Espace et tabulation

  • É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]*$//'

Ligne vide

  • É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'		# merci Adrien
    • Uniquement celles de fin
      • sed -e :a -e '/^\n*$/ {$d;N;ba' -e '}'

Intervalle régulier

  • É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 des lignes

  • Joindre les lignes 2 par 2
    • sed '$!N;s/\n//'
  • Joindre les lignes 3 par 3
    • sed '$!N;s/\n//;$!N;s/\n//;'
  • 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)

Cette astuce fait suite à cette discussion sur le forum Linux/Unix

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



À compléter...
3
Merci

Quelques mots de remerciements seront grandement appréciés.

Cet article est régulièrement mis à jour par des experts sous la
direction de Jean-François Pillou, fondateur de CommentCaMarche
et directeur délégué au développement numérique du groupe Figaro.

A voir également

Publié par . Dernière mise à jour le par christelle.b.

Ce document intitulé «  Sed - Trucs et astuces  » issu de CommentCaMarche (https://www.commentcamarche.net/) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

1 vote - 3.0 /5

1 Commentaire

-
bjr je suis débutant en script bash
j'ai une ligne file "/home/test/valeur"; dans mon fichier fic
je veut l'éditer en file "/home/test/valeur.ajour";
je met en variable les deux ligne var1, et var2 le nouvau valeur
mon command est : sed - i 's#'.*$var1.* '#'var2'#g ' fic
le problème c'est : sed: -e expression #, char 8: unterminated 's' command
merci de m'aider