Suppression des lignes dans un fichier
Résolu
cachouCacharel
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
cachouCacharel Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
cachouCacharel Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
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???
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:
- Suppression des lignes dans un fichier
- Forcer la suppression d'un fichier - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
2 réponses
Salut,
Au choix.
Ou tu cibles directement la ligne contenant "=user2", puis tu charges la ligne suivante (commande "n") et tu la supprimes :
Ou tu cibles une plage d'adresse entre "[user2]" et une ligne vide "/^$/" et tu supprimes la ligne contenant "host" :
$
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
$
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
[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