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
.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 →
Ceci est une ancienne révision du document !
“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
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
-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 :
[options]
⇔ cmd_de_sed
;/adressages/
⇔ cmd_de_sed
Cette association détermine les possibilités de combinaison des options de la commande sed.
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
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
-r
ne s'utilisera pas avec la commande y
puisque la translittération n'utilise pas de E.R.-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
…
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.
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”)
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 ... }
-f
sans autres options :sed -f script-sed fichier
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
-f
avec d'autres options :/([[: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
-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”.
/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 :
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.
!
) $
).3)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
sed -rne '$p' sed-options
il veut pour adresse mail 127.0.0.1@lo
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.
$
désignant la dernière ligne;/
;/
, toutes les lignes qui correspondent à /expression régulière/
sont traitées .C'est une paire d'adresses simples séparées une virgule. Toutes les combinaisons sont possibles.
n,mcmd_sed
: l'analyseur de sed traite les lignes comprises entre les deux adresses, et celles des adresses aussi./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)n,/ER/
: La plage est constituée à partir de la ligne numéro n
, jusqu'à la première ligne reconnue par le E.R./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
.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é.-s
.$
de commandes sed, avec $
des E.R., et le caractère ^
placé sur une commande pour signifier “première ligne”, n'existe pas !