Ecrire à la fin d'une ligne ciblée sed
Résolu/Fermé
Crisis66
Messages postés
6
Date d'inscription
mardi 30 juin 2015
Statut
Membre
Dernière intervention
30 juin 2015
-
Modifié par Crisis66 le 30/06/2015 à 10:05
Crisis66 Messages postés 6 Date d'inscription mardi 30 juin 2015 Statut Membre Dernière intervention 30 juin 2015 - 30 juin 2015 à 15:36
Crisis66 Messages postés 6 Date d'inscription mardi 30 juin 2015 Statut Membre Dernière intervention 30 juin 2015 - 30 juin 2015 à 15:36
A voir également:
- Ecrire à la fin d'une ligne ciblée sed
- Aller à la ligne excel - Guide
- Ecrire en gras sur whatsapp - Guide
- Site de vente en ligne particulier - Guide
- Partager photos en ligne - Guide
- Ecrire en miroir - Guide
2 réponses
mamiemando
Messages postés
33375
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 novembre 2024
7 802
Modifié par mamiemando le 30/06/2015 à 10:21
Modifié par mamiemando le 30/06/2015 à 10:21
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
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
30 juin 2015 à 11:00
30 juin 2015 à 11:00
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
}
Crisis66
Messages postés
6
Date d'inscription
mardi 30 juin 2015
Statut
Membre
Dernière intervention
30 juin 2015
30 juin 2015 à 14:24
30 juin 2015 à 14:24
merci dubcek, mais comme j'avais dis en commentaires plus haut, en faite j'ai plusieurs members dans mon fichier. Mais j'ai résolu le problème, j'ai pu faire une substitution à ma ligne et ça a fait exactement ce que je voulais faire. merci encore :)
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
30 juin 2015 à 14:40
30 juin 2015 à 14:40
quel est le critère pour savoir quel member ?
Crisis66
Messages postés
6
Date d'inscription
mardi 30 juin 2015
Statut
Membre
Dernière intervention
30 juin 2015
30 juin 2015 à 15:00
30 juin 2015 à 15:00
En faite j'ai fais selon le numéro de la ligne ou se trouve le member que je souhaite, je le recherche puis je le substitue
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
30 juin 2015 à 15:33
30 juin 2015 à 15:33
si il est à la ligne 4, on peut faire
awk '/^members/ && NR==4 {$0=$0 ",member4"} {print}' fichier
Crisis66
Messages postés
6
Date d'inscription
mardi 30 juin 2015
Statut
Membre
Dernière intervention
30 juin 2015
30 juin 2015 à 15:36
30 juin 2015 à 15:36
oui en effet
30 juin 2015 à 10:24
Je te remercie de ton aide
Modifié par mamiemando le 30/06/2015 à 10:44
- 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
30 juin 2015 à 14:20
30 juin 2015 à 10:39