1.4 SED

De UnixWiki
Aller à : navigation, rechercher

Substitution sur tous le fichier

 sed s/$OLD_CHAINE/$NEW_CHAINE/ $FICHIER

Pour le faire direct dans un nouveau fichier

 sed s/toto/papa/ < tutu > toto

ou

 sed -i s/toto/papa/ toto

Modifier juste une ligne précise

 sed '1 s/toto/papa/' tutu

Modifier un range de ligne

 sed '2,5 s/toto/papa/' tutu

Remplacer un caratère par un saut de ligne (UNIX):

 sed 's/$foo/\^J/g' $FILE

le ^J s'obtient en fesant CTRL+V CTRL+J

Remplacer un caratère par un saut de ligne (WINDOWS):

 sed 's/$foo/\^M/g' $FILE

Remplacer les sauts de ligne par un espace (UNIX)

 sed ':a;N$!ba;s/\n/ /g'

le ^M s'obtient en fesant CTRL+V CTRL+M

Supprimer les lignes vide

 sed '/^$/d'

Il n'est pas obligatoire d'utiliser « / » comme délimiteur. Les caractères « #, - . ; » (liste non exhaustive) peuvent également servir pour éviter l'accumulation d'anti-slash de « protection » rendant la syntaxe peu lisible. Les commandes suivantes sont équivalentes:

 s/\/un\/chemin\/vers/\/une\/autre\/chaine/
 s#/un/chemin/vers#/une/autre/chaine#

 sed 'N;s/\n / /g;P;D;'

qui peut se décomposer de la manière suivante (les ; permettent de séparer les commandes) :

 N;s/\n / /g;P;D;

 N                  lit (aussi) la ligne suivante
   s/\n / /g         effectue la substitution...
    /\n /                ... d'un saut de ligne suivi d'un espace...
      / /              ... par un simple espace...
         g             ... pour toutes les occurrences
           P       retourne le résultat du traitement
             D     efface ce qui reste afin de ne pas afficher
                       la ligne suivante deux fois

Suppression de la 3ème ligne

 sed '3d' mon_fichier.txt

Suppression de la ligne contenant la chaîne "awk"

 sed '/awk/d' mon_fichier.txt

Suppression de la dernière ligne

 sed '$d' mon_fichier.txt