Suppression des lignes dans un fichier

Résolu/Fermé
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014 - 27 août 2012 à 10:47
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014 - 27 août 2012 à 12:49
Bonjour,

j'aimerais supprimer une ligne en cours de lecture.En fait j'ouvre une boucle <tant que> qui va lire mon fichier ligne a ligne et j'aimerai supprimer une ligne bien precise. mais le hic c'est que la meme ligne(le meme debut) pourrait apparaitre plusieurs fois dans mon fichier mais pas avec les memes donnees. pour etre plus claire, voici le contenu de mon fichier

[user1]
comment=user1
host allow= x.x.x.x y.y.y.y z.z.z.z
create mask = aaaa
writable=yes


[user2]
comment=user2
host allow= d.d.d.d e.e.e.e f.f.f.f
create mask = aaaa
writable=yes

[user3]
comment=user3
host allow= a.a.a.a b.b.b.b c.c.c.c
create mask = aaaa
writable=yes


je suis sensee faire une recherche de la 2eme occurence de la ligne <host allow*>, ce que j'arrive parfaitement a faire mais lorsque j'eaasie de supprimer la ligne host allow retrouvee, ca supprime toutes les lignes host allow du fichier. voici ce que j'ai fait:

trouve_code=false
trouve_ha=false

while read ligne
do
if [[ $ligne = "[user2]" && !$trouve_code ]]
then trouve_code=true
fi
if [[ $trouve_code && !$trouve_ha ]]
then
if [[ $ligne="host allow" ]]
then
trouve_ha=true
sed -i '/host/d' monfichier.txt
fi
fi

lorsque je fait ceci je retrouve bien la 2eme occurence du champ host allow(dc celui du user2) mais sed que je fais me supprime toutes les champs host allow du fichier pourtant je ne voudrais supprimer que le champ host allow du user2


Quelqu'un pourrait m'aider SVP???
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 août 2012 à 11:05
Salut,

Au choix.
Ou tu cibles directement la ligne contenant "=user2", puis tu charges la ligne suivante (commande "n") et tu la supprimes :

$ sed '/=user2/{n;d}' plop 
[user1]
comment=user1
host allow= x.x.x.x y.y.y.y z.z.z.z
create mask = aaaa
writable=yes


[user2]
comment=user2
create mask = aaaa
writable=yes

[user3]
comment=user3
host allow= a.a.a.a b.b.b.b c.c.c.c
create mask = aaaa
writable=yes

Ou tu cibles une plage d'adresse entre "[user2]" et une ligne vide "/^$/" et tu supprimes la ligne contenant "host" :

$ sed '/\[user2/,/^$/{/host/d}' plop 
[user1]
comment=user1
host allow= x.x.x.x y.y.y.y z.z.z.z
create mask = aaaa
writable=yes


[user2]
comment=user2
create mask = aaaa
writable=yes

[user3]
comment=user3
host allow= a.a.a.a b.b.b.b c.c.c.c
create mask = aaaa
writable=yes



$
0
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014
27 août 2012 à 11:37
merci bien ca marche bien mais mon probleme n'est pas entierement resolu.Bon disonsque je l'avais pas entierement poser. bon SVP si je voudrais supprimer tout le bloc

[user2]
comment=user2
create mask = aaaa
writable=yes

comment je fais?esce que je vais tout le temps charger une ligne pour supprimer la suivante ou il est possible de supprimer directement toutes ces lignes precises???votre aide encore SVP
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 août 2012 à 11:39
$ sed '/\[user2/,/^$/{d}' plop 
[user1]
comment=user1
host allow= x.x.x.x y.y.y.y z.z.z.z
create mask = aaaa
writable=yes


[user3]
comment=user3
host allow= a.a.a.a b.b.b.b c.c.c.c
create mask = aaaa
writable=yes
0
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014
27 août 2012 à 12:09
je sais pas ce qui se passe. mais lorsque j'execute ca me supprime uniquement les lignes qui contiennent user2. dc les lignes host allow, create mask et writable demeurent. comment je fais SVP???
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 août 2012 à 12:20
Affiche le contenu de ton fichier avec la commande "cat -A fichier", et affiche aussi ce que tu tapes et le résultat que tu obtiens (enlèves l'option "-i" de sed si tu l'a mise)
0
cachouCacharel Messages postés 12 Date d'inscription lundi 27 août 2012 Statut Membre Dernière intervention 22 janvier 2014
27 août 2012 à 12:49
ca marche tres bien!c'etait plutot autre chose qui bloquait!Infiniment merci...je suis tres ravie!!!excellente journee a vs!!!!!!
0