Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 roll

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