Ecrire à la fin d'une ligne ciblée sed
Résolu
Crisis66
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Crisis66 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Crisis66 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Après plusieurs recherches un peu partout sur le web, j'ai décidé de passer par le forum.
J'ai dans un fichier quelque chose qui ressemble à ça:
define hostgroup{
hostgroup_name hello ; The name of the hostgroup
# alias hello ; Long name of the group
members membre1,membre2,membre3
}
j'aimerai savoir comment sed peu m'aider à partir d'un script à écrire par exemple un "membre4" à la fin de la ligne members.
Si vous pouvez m'aider je vous en remercie d'avance
Après plusieurs recherches un peu partout sur le web, j'ai décidé de passer par le forum.
J'ai dans un fichier quelque chose qui ressemble à ça:
define hostgroup{
hostgroup_name hello ; The name of the hostgroup
# alias hello ; Long name of the group
members membre1,membre2,membre3
}
j'aimerai savoir comment sed peu m'aider à partir d'un script à écrire par exemple un "membre4" à la fin de la ligne members.
Si vous pouvez m'aider je vous en remercie d'avance
A voir également:
- Ecrire à la fin d'une ligne ciblée sed
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Ecrire en gras sur whatsapp - Guide
- Mètre en ligne - Guide
- Comment écrire # sur pc - Guide
2 réponses
Bonjour
Solution :
Tu peux utiliser ceci, en supposant que ton texte soit stocké dans
Exemple :
Explication :
sed attend un quadruplet de la forme 'operation/motif/remplacement/option' avec :
- operation :
- option :
Détaillons à présent le motif et le replacement.
motif : Le but est de capturer toute la ligne contenant "members".
-
-
remplacement : on utilise le contenu de la variable
Bonne chance
Solution :
Tu peux utiliser ceci, en supposant que ton texte soit stocké dans
toto.txt:
sed -i 's/\(.*members.*\)/\1,membre4/g' toto.txt
Exemple :
(mando@velvet) (~) $ cat toto.txt
define hostgroup{
hostgroup_name hello ; The name of the hostgroup
# alias hello ; Long name of the group
members membre1,membre2,membre3
}
(mando@velvet) (~) $ sed -i 's/\(.*members.*\)/\1,membre4/g' toto.txt
(mando@velvet) (~) $ cat toto.txt
define hostgroup{
hostgroup_name hello ; The name of the hostgroup
# alias hello ; Long name of the group
members membre1,membre2,membre3,membre4
}
Explication :
sed attend un quadruplet de la forme 'operation/motif/remplacement/option' avec :
- operation :
s(search and replace)
- option :
g(global, ie appliqué à chaque morceau de ligne qui respecte le motif, on aurait pu ne rien mettre ici)
Détaillons à présent le motif et le replacement.
motif : Le but est de capturer toute la ligne contenant "members".
-
.*signifie n'importe quelle séquence de caractère (espaces compris)
-
\(...\)permet de mémoriser dans une variable (
\1) ce qui a été capturé par le motif entre ces 2 parenthèses. Ici on capture tout le motif mais on pourrait dans l'absolu capturer plusieurs sous motifs (qui seraient stockés dans
\1,
\2, etc...)
remplacement : on utilise le contenu de la variable
\1auquel on ajoute le morceau de texte à ajouter à la suite (ici
,membre4).
Bonne chance
hello
n'ajoute ,member4 qu'à la fin des lignes qui commencent par members
n'ajoute ,member4 qu'à la fin des lignes qui commencent par members
$ awk '/^members/ {$0=$0 ",member4"} {print}' fichier
define hostgroup{
hostgroup_name hello ; The name of the hostgroup
# alias hello ; Long name of the group
members membre1,membre2,membre3,member4
}
Je te remercie de ton aide
- soit tu veux corriger toutes les lignes contenant members, dans ce cas tu peux utiliser la commande que je te donne.
- soit tu veux en modifier quelques une en particulier et il faut que le motif passé soit plus précis pour qu'il ne réagisse que sur les lignes que tu veux modifier.
Si tu ne peux pas discriminer ces lignes des autres, tu peux utiliser . C'est la même syntaxe que .
Concrètement :
1) Lance la commande :
2) Appuie sur la touche Echap
3) Tape ).
Tu noteras que l'on a passé l'option qui demande confirmation (non supportée dans ). Concrètement te demandera à chaque fois occurrence du motif trouvée si tu veux opérer le remplacement (y) ou pas (n).
Tu peux aussi écrire un petit script si tu veux quelque chose de plus poussé (par exemple, pour réagir sur une motif et un numéro de ligne donné). Mais je ne pense pas que offre une syntaxe qui permette de le faire.
Bonne chance