logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


sed par la méthode structuraliste

  • Objet : Décrypter la documentation de sed et dégager la structure de son fonctionnement.
  • Niveau requis :
  • Commentaires : Pour tentative d'application (orienté Linux) de la théorie de la praxis de F. de Saussure

“Notre dette des uns aux autres, infiniment, dans une chaîne sans fin ni frontière, dans l’espace comme dans le temps. Cette dette dont la conscience nous fera accueillir l’étrange et l’étranger, l’inconnu comme l’imprévu lorsqu’ils frapperont inopinément à nos portes. A condition cependant que nous ayons appris à vivre en vérité. Et que, par conséquent, nous n’ayons pas renoncé à savoir.”

Michel Foucault

Introduction

man
sed [OPTION]... {script-only-if-no-other-script} [input-file]...

L'éditeur de flux sed est lancé en ligne de commandes avec la commande sed.
Il ne faut pas confondre la commande sed reconnue par le shell (qui lance le programme sed) avec les commandes internes du programme sed.

Par défaut (sans option) sed traite le flux d'entrée et affiche sur la sortie, non seulement le flux d'entrée qu'elle a lu ligne par ligne, mais aussi ce qu'elle a fait sur certaine ligne.
Le flux d'entrée peut être ce qui lui est transmis par un pipe en ligne de commandes ou un fichier.

cmd[cat|echo|ls|...] fichier[repertoire] | sed [options] cmd_de_sed

ou

sed [options] cmd_de_sed fichier
-Les options concernent la ligne de commandes du programme sed et non les commandes de sed.

-J'appelle grammaire du programme sed les règles qui gèrent la syntaxe global d'une ligne de commandes sed relativement aux commandes internes de sed. En effet, la syntaxe de l'adressage et le choix des options dépendent du choix des commandes internes.

Par conséquent :
1) toutes les options “lues” par le shell qui lance sed, ne sont pas toutes associables entre elles selon les commandes internes utilisées.
2) certains types d'adressage ne fonctionnent qu'avec certaines commandes de sed.
3) toutes les commandes internes ne sont pas toutes associables entre elles.

Cette grammaire se résume ainsi :

[options] /adressage/cmd_de_sed [options_cmd_de_sed]

Ce que j'appelle là “options_cmd_de_sed” est appelé selon la documentation “drapeaux”, ou encore “options”. Elle dépend de la connaissance des commandes de sed.

→ La compréhension de la documentation et le fonctionnement global de sed sont facilités lorsque l'on maîtrise un double rapport d'implications :

  • 1) la mise en relation [options]cmd_de_sed ;
  • 2) /adressages/cmd_de_sed
  • La compréhension globale de sed dépend ensuite simplement de la mise en relation de 1 et 2.

Les rapports d'implication "options de sed" <=> "commandes de sed"

Cette association détermine les possibilités de combinaison des options de la commande sed.

Les options -r ; -e ; -n

sed -rne '/adressage/cmd_de_sed' fichier

Soit le fichier nommé “sed-options” :

Il est vraiment idiot,
se balade sur un vélo
sans pédale, et porte ses sandales
à son goulot.
il veut pour adresse mail 127.0.0.1@lo
  • Exemple :
sed -rne '4p' sed-options
à son goulot.
On voit là que la commande (interne de sed) p prévaut sur l'option sed -n.
Dans l'exemple précédent l'option -e et -r sont inutiles, elles ne le sont plus pour l'exemple suivant :
sed -rne '/([[:digit:]].){3}[[:digit:]]@lo/p' -e '4p' sed-options
à son goulot.
il veut pour adresse mail 127.0.0.1@lo
La possibilité d'utiliser telle où telle option dépend de la fonction des commandes de sed.
Ainsi l'option -r ne s'utilisera pas avec la commande y puisque la translittération n'utilise pas de E.R.
L'option -i ne s'utilisera qu'avec les commandes qui transforment le flux d'entrée, donc elle ne s'utilisera pas avec les commandes de sed p, l, r

Options -i avec -r , -n , -e

Lorsqu'on a besoin d'adresser au moyen d'une E.R. étendue, et de modifier réellement, il faut associer les options -r et -i.
La syntaxe est toujours -ri , et non pas -ir.
On peut associer d'autres options, après -ri

sed -rine '/([[:digit:]].){3}[[:digit:]]@lo/d' sed-options

ou

sed -rien '/([[:digit:]].){3}[[:digit:]]@lo/d' sed-options
L'option -n rendant le retour silencieux :
cat sed-options
Il est vraiment idiot,
se balade sur un vélo
sans pédale, et porte ses sandales
à son goulot.

L'option f

sed [options] -f script [-i] [fichier...]
Cette option permettant l'utilisation de script sed, elle va donc influer sur la grammaire globale de sed.
Les commandes internes de sed doivent être inscrites dans le script, ce qui influe sur la syntaxe d'appel des commandes internes. L'utilisation du tampon n'étant plus le même avec l'utilisation d'un script sed, l'effet de l'option -n va changer.

Elle implique aussi la possibilité d'utiliser les commandes de sed mises au point principalement pour l'usage de scripts sed.
(Voir la troisième partie “scripts sed avancés”)

  • Éléments de syntaxe d'un script sed :
Le fait que les commandes internes soient dans un fichier (ou script sed) implique que l'encadrement des commande de sed par ' ou ne doit pas être utilisé.
Un adressage pour chaque commande :
/adressage1/cmd1_interne
/adressage2/cmd2_interne
...
Un adressage pour plusieurs commandes :

Utilisation d'une commande spécifiquement utilisée avec les scripts sed : { }.

/adressage1/{
    cmd1_interne
    cmd2_interne
    ...
}
  • sed -f sans autres options :
sed -f script-sed fichier
  1. Soit le fichier d'origine nommé “sed-options”
  2. Soit le script sed nommé “script1-sed” :
Script1 :
/([[:digit:]].){3}[[:digit:]]@lo/p
4p
sed -rnf script1-sed sed-options
à son goulot.
il veut pour adresse mail 127.0.0.1@lo
  • Option -f avec d'autres options :
  1. Soit le fichier d'origine nommé “sed-options”
  2. Soit le script sed nommé “script2-sed” :
/([[:digit:]].){3}[[:digit:]]@lo/a\bizarre ce Nono
Dès lors qu'on utilise l'option -f, l'option -e n'est plus utilisable puisque le script enchaîne les commandes en les plaçant chacune sur une ligne ;
Mais l'option -r doit être utilisable puisqu'il peut y avoir dans le script sed une commande dont l'adressage est une E.R. étendue.
De même l'option -i doit être utilisable puisque un script sed doit servir à modifier un fichier texte !

Ainsi :

sed -rf script2-sed -i sed-options

Pour visualiser, utilisation d'une commande d'affichage ( cat par exemple) même si -n n'a pas été utilisée1)
Attention l'utilisation de l'option -n est plus qu'inutile !
En l'utilisant, il ne resterait du fichier que ce qui lui aurait été ajouté.
La note ci-dessus en donne exemple.

cat sed-options
Il est vraiment idiot,
se balade sur un vélo
sans pédale, et porte ses sandales
à son goulot.
il veut pour adresse mail 127.0.0.1@lo
bizarre ce Nono
Si on ajoute l'option -n ;
sed -rnf script2-sed -i sed-options

on obtient alors :

cat sed-options
bizarre ce Nono

La ligne de commandes de “script2-sed”, matche la ligne “il veut pour adresse mail 127.0.0.1@lo”, du fait de l'option -n, ni la ligne qui correspond à la E.R, ni les autres lignes du fichier ne sont placées dans le tampon de travail de sed ; puis sed applique la commande d'ajout de “script2-sed” ; et inscrit enfin ce résultat dans le fichier “sed-options”.
par conséquent il ne reste plus dans le fichier que l'ajout “bizarre ce Nono”.

Les rapport d'implication /adressages/ <=> commandes de sed

Analyse de l'implication : /adressages/cmd_de_sed

- Sans adressage, sed applique chaque commande à l'intégralité des lignes du fichier à traiter.
Cela implique donc un rapport entre ce que fait une commande interne et le type d'adressage qu'il est possible d'utiliser pour telle commande.
Autrement dit, ce que permet une commande interne détermine les types d'adressages possibles, adressage simple ou double d'abord.

- De plus, certaines commandes indiquent en elles-mêmes, non pas le type d'adressage, mais un adressage précis, comme par exemple N.

Ainsi :

  1. Toutes les commandes peuvent accepter un adressage simple, certaines autres accepteront en plus un adressage double.
  2. Avec la commande y il apparaît l'adressage du numéro d'occurrence sur une ligne.2)

- Par ailleurs, l'adressage étant tributaire des commandes internes, on recense deux caractères spéciaux d'adressage.

  1. le caractère d'exclusion de l'adressage (!)
  2. le caractère d'adressage de la dernière ligne ($).3)
    Tous deux sont des caractères spéciaux des commandes internes de sed, et se placent donc devant la commande interne, jamais dans l'adressage !

Rappel des types d'adressage

le caractère d'exclusion (!)

sed-options
sed-options
Il est vraiment idiot,
se balade sur un vélo
sans pédale, et porte ses sandales
à son goulot.
il veut pour adresse mail 127.0.0.1@lo
  • Exemple : afficher la dernière ligne de “sed-options”
sed -rne '$p' sed-options
il veut pour adresse mail 127.0.0.1@lo
  • Exemple : afficher toutes les lignes sauf celle de la E.R
sed -rne '/([[:digit:]].){3}[[:digit:]]@lo/!p' sed-options

ou ;-)

sed -rne '$!p' sed-options
Il est vraiment idiot,
se balade sur un vélo
sans pédale, et porte ses sandales
à son goulot.

Adressage simple

  • un numéro de ligne (les lignes sont numérotées à partir du chiffre 1);
  • le caractère $ désignant la dernière ligne;
  • une expression régulière encadrée par des caractères /;
Attention avec l'adressage simple !
  • Avec l'adressage simple par numéro de lignes, seule la ligne indiquée par le numéro est traitée.
  • Avec l'adressage simple par l'encadrement /, toutes les lignes qui correspondent à /expression régulière/ sont traitées .

Adressage double

C'est une paire d'adresses simples séparées une virgule. Toutes les combinaisons sont possibles.

  • deux numéro de ligne n,mcmd_sed : l'analyseur de sed traite les lignes comprises entre les deux adresses, et celles des adresses aussi.
  • deux encadrements /ER1/,/ER2/ : l'analyseur de sed traite les lignes comprises délimitées par les E.R de début et de fin en prenant le nombre de lignes le plus large4)
  • combinaison n,/ER/ : La plage est constituée à partir de la ligne numéro n, jusqu'à la première ligne reconnue par le E.R.
  • combinaison /ER/,n : La page est constituée à partir de la première ligne vérifiant l'expression régulière jusqu'à la ligne de numéro n.

Études des commandes internes en fonction des adressages

Les commandes d'adressage simple

1)
Lors de l'utilisation d'un script sed sur un fichier, pour ce qui concerne les commandes d'insertion (i), d'ajout (a) et de changement (c), fort heureusement, par défaut, l'affichage sur la sortie standard du tampon de travail de sed est annulé.
Ce n'est bien sûr pas le cas pour la commande de suppression -s.
2)
Les deux derniers points seront précisés au paragraphe ci-après, “commandes en fonction de leur adressage”.
3)
Ne pas confondre le caractère spéciale $ de commandes sed, avec $ des E.R., et le caractère ^ placé sur une commande pour signifier “première ligne”, n'existe pas !
4)
c'est-à-dire, si l'E.R. de début figure entre les deux adressages, il traite le plage la plus grande.
utilisateurs/hypathie/tutos/sed-par-la-methode-structuraliste.1406375445.txt.gz · Dernière modification: 26/07/2014 13:50 par Hypathie

Pied de page des forums

Propulsé par FluxBB