user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 13-01-2013 17:21:41

WarLocG
#! modo de compet

La commande sed de A à Z

La commande Sed

1. Introduction

Sed est une des composantes essentielles à tout système Unix.

C’est un éditeur de texte non interactif, au sens où il se pilote soit par la ligne de commande, soit par le biais d’un script.

Sed est un logiciel puissant, capable d’effectuer de nombreuses modifications (ajout, suppression, insertion...)
au sein d’un ou plusieurs flux de texte.

Pour de plus amples informations, veuillez vous référer à sa page de manuel :

[user@linux ~]$ man sed

2. Fonctionnement

La syntaxe générale de sed est la suivante :

sed [-n] [-e commande] [-f fichier de commandes] [fichier]

Les options de sed 1

Option      Description
--------     --------------
 -n            Ecrit seulement les lignes spécifiées (par l'option /p) sur la sortie standard.
 -e            Permet de spécifier les commandes à appliquer sur le fichier. Cette option est utile lorsque vous appliquez plusieurs commandes. Afin d'éviter que le shell n'interprète certains caractères, il faut encadrer la commande avec ' ou avec ".
 -f             Lit les commandes dans le fichier spécifié.

Afin de sélectionner les lignes à traiter, sed utilise un système d’adresses : soit un numéro ou une plage de
lignes, soit une expression régulière que doit satisfaire la ligne pour être prise en compte (cf. le cours sur les expressions régulières).

Ainsi, la forme générale d’une commande est :

adresse commande

Voici les différentes formes d’adresses :

Les options de sed 2

Options                 Description
---------                ---------------
aucune option       Toutes les lignes
 n                         La ligne n
 n,m                     La portion de texte entre les lignes n et m
 regex                   Les lignes reconnues par l’expression régulière regex

3. Commandes

Dans toutes les commandes, il est possible d’utiliser les références arrières. Si dans une première partie de
l’expression, nous reconnaissons un ou plusieurs motifs : /[0-9][a-Z]/, ils deviennent disponibles dans la
seconde partie de l’expression sous la forme de "\x" ou x est le numéro du motif. Ainsi :

s/[0-9][a-Z]/\2\1/

Inverse l’ordre du chiffre et de la lettre.

Exemple d'application

[user@linux ~]$ sed -e "s/\([0-9][0-9]*\)/abricot\1abricot/" fichier

La chaîne 3linux deviendra linuxabricot3abricot

La sous chaîne \([0-9][0-9]*\) désigne un ou plusieurs chiffres, chacun sera entouré d'une chaîne de
charactères "abricot".

3.1. Substitution

La syntaxe générale de la commande de substitution est la suivante :

ad1,ad2 s/regex/remplacement/options

Remplace les chaînes reconnues par l’expression régulière regex par la chaîne de remplacement entre les lignes ad1 à ad2 (facultatif).

Exemple: Sed et Substitution

[user@linux ~]$ sed "s/tux/TUX/" fichier

Cela va changer la première occurence de la chaîne tux par TUX (la première chaîne tux uniquement)

[user@linux ~]$ sed "s/tux/TUX/3" fichier

La 3ème occurence de la chaîne tux sera changé en TUX

Les options de la commande de substitution, qui sont facultatives sont listées ci-dessous (il est possible d’en
spécifier plusieurs en les concaténant):

Sed et Substitution

Option       Description
--------      --------------
 g              Global, c'est à dire toutes les occurrences de la chaîne seront remplacées (par défaut seule la première occurrence est remplacée)
 p              Imprime la ligne (utile avec l'option -n)
 w fichier   Ecrit la ligne dans le fichier spécifié en plus de la sortie standard.

Example: Sed et la Substitution

[user@linux ~]$ sed "s/[Tt]ux/Supertux/g" mon_fichier

Remplace toutes les occurrences de Tux ou tux par Supertux dans tout le fichier mon_fichier.

[user@linux ~]$ sed -e "s/\([0-9][0-9]*\)/**\1**/" fichier

Encadre le premier nombre de la ligne avec des ** (utilisation des références arrières).

3.2. Négation

Il est possible d’inverser le sens d’une expression régulière : n’afficher que les lignes qui ne contiennent pas
BSD par exemple. La syntaxe générale est la suivante :

ad1,ad2 !fonction argument

La fonction est appliquée à toutes les lignes qui ne correspondant pas à la caractérisation.

Example: Sed et la Négation

[user@linux ~]$ sed -e '/[a-cA-C]/!p' fichier

Affiche toutes les lignes qui ne contiennent pas abc ou ABC

3.3. Suppression

Efface les lignes reconnues par l’expression régulière ou spécifiées par les adresses (au niveau de la sortie, le
fichier d'origine n'est pas modifié).

Example: Sed et la suppression

[user@linux ~]$ sed "1,10d" mon _fichier

- Sortie du fichier à partir de la onzième ligne.

[user@linux ~]$ sed "/^From/!d" mon _fichier

- On efface tout sauf les lignes commencant par « From », donc on n'imprime que les lignes commencant par « From ».

Tip
Il est parfois plus facile de caractériser la négation de ce que l'on veut (voir exemple précédent).

3.4. Insertion

Il existe deux commandes d’insertion :

• Ecrire le texte après la ligne

[user@linux ~]$ sed a\texte monfic

• Ecrire le texte avant la ligne

[user@linux ~]$ sed i\texte monfic

3.5. Autres commandes

Les autres commandes de Sed

Option       Description
--------      --------------
 q              Stoppe l’exécution de sed
 =             Ecrit les numéros de ligne
 w fichier   Ecrit dans un fichier

Comme je ne vais quand meme pas m'accaparer le travail de l'auteur qui a écrit cette partie de manuel provenant du pdf Essentiel sur LPIC-101, voici un lien où vous pourrez obtenir les ressources moyennant une petite inscription pour accéder gratuitement aux contenus via open-campus:
http://www.supinfo.com/fr/Default.aspx


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

Pied de page des forums