#1 Le 20/04/2011, à 21:27
- krisofe
[bash , sed ] - supprimer des lignes entre deux balises
Le sujet est évoqué maintes fois et les réponses satisferaient tout le monde sauf des non développeurs avec deux neurones alors
je pose le fichier ici et des humbles tolérants daigneront répondre...
but : supprimer toutes les lignes
à partir de la balise (comprise et unique) jusqu'à l'autre balise (comprise mais récurrente dans le fichier).
Le magicien sed auquel je place une variable (toto,public ou titi)
effacera les lignes entre les balises.
On remarque que le nombre de lignes entre deux balises peut varier.
<User toto>
VirtualChroot true
Home /totohome
StayAtHome true
LogFile /var/log/sftp-server_toto.log
</User>
<User public>
VirtualChroot true
Home /publichome
StayAtHome true
LogFile /var/log/sftp-server_public.log
</User>
<User titi>
GlobalDownload 10k
Home /titihome
CreateHome false
Shell /bin/MySecureShell
GlobalUpload 20
</User>
Merci
Hors ligne
#2 Le 20/04/2011, à 21:42
- poloflip
Re : [bash , sed ] - supprimer des lignes entre deux balises
Salut a toi.
Si j'ai bien compris , tu veux supprimer tout ce qui est entre les balises. Et le réécrire dans le fichier , c'est bien ca ?
cat nomduficher | grep User > test
echo"" > test
cat test > nomdufichier
rm test
Si c'est pour faire un script, tu rajoutes #! /bin/bash au début du fichier, et tu le modifie avec un chmod +x nomdufichier.
Dernière modification par poloflip (Le 20/04/2011, à 21:47)
See you space cowboy
Hors ligne
#3 Le 20/04/2011, à 22:46
- AnsuzPeorth
Re : [bash , sed ] - supprimer des lignes entre deux balises
Bsr,
Comme tu dis le sujet à déjà été traité plein de fois ...!
Mais disons que tu n'y comprends rien, ou que cela ne t'intéresse pas !
Pour écrire un nouveau fichier modifié.
n=toto
sed "/User $n/,/User>/d" ./fichierAtraiter > ./newFichier
ou pour modifier le fichier original
sed -i "/User $n/,/User>/d" ./fichierAtraiter
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#4 Le 21/04/2011, à 09:00
- krisofe
Re : [bash , sed ] - supprimer des lignes entre deux balises
Merci pour votre compréhension ;-)
Comme j'ai tenté de l'expliquer au début, je souhaite effacer ce qui est entre les balises, mais conserver tout le reste,
alors
sed "/User $n/,/User>/d" ./fichierAtraiter > ./newFichier
ne me conviendrait pas.
Comment maintenant je peux utiliser cette commande où je vois clairement maintenant la syntaxe pour mon exemple pour supprimer
cette chaîne.
Merci par avance,
Christophe
Hors ligne
#5 Le 21/04/2011, à 10:19
- AnsuzPeorth
Re : [bash , sed ] - supprimer des lignes entre deux balises
Bjr,
Donc, ce que tu veux c'est vider le contenu de la balise, en gardant la balise ?
v=toto
sed "/User $v/,/User>/{/User $v/b;/User>/b;/.*/d}" ./fichier > ./NewFichier
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#6 Le 21/04/2011, à 20:39
- krisofe
Re : [bash , sed ] - supprimer des lignes entre deux balises
Merci ;-)
On y est presque !
Et bien je me permets de reglisser une partie de mon souhait :
but : supprimer toutes les lignes
à partir de la balise (comprise et unique) jusqu'à l'autre balise (comprise mais récurrente dans le fichier).
Comme c'est écrit, ce sont les balises comprises.
Je devrai me débrouiller seul maintenant, mais même pas ! Grave l'admin système
sed "/User toto/,/User>/{/User toto/b;/User>/b;/.*/d}" ./test.txt > ./NewFichier.txt
Hors ligne
#7 Le 21/04/2011, à 20:59
- AnsuzPeorth
Re : [bash , sed ] - supprimer des lignes entre deux balises
Soit je sais pas lire, soit ..
Comme j'ai tenté de l'expliquer au début, je souhaite effacer ce qui est entre les balises, mais conserver tout le reste,
Comme c'est écrit, ce sont les balises comprises.
De toute façons, la première soluce supprime le texte et les balises, la seconde juste le texte.
Si ca fonctionne pas, ça doit venir d'ailleurs.
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#8 Le 21/04/2011, à 21:59
- krisofe
Re : [bash , sed ] - supprimer des lignes entre deux balises
Merci beaucoup :-)
Tu avais raison, je m'étais aussi bien expliqué que je développe.
Bonne soirée,
Christophe
Hors ligne