[Shell] Detection de mots dans fichier
Résolu
yacleouf
Messages postés
438
Date d'inscription
Statut
Membre
Dernière intervention
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'essaie de réaliser un script en shell (bin/sh) qui chercherais dans un fichier xml des balises précises, et supprimerais leur contenu.
Par exemple :
Dans cette exemple, je souhaiterais détecter l'ouverture de balise titi et supprimer son contenu en gros supprimer toute cette ligne :
<titi cette ligne serait à supprimer
timestamp="2013-07-23">
Une fois ça fait, je rechercherais la balise </titi> et la supprimerais également.
j'ai fait plusieurs essais mais infructueux, notamment avec la commande sed,
Merci d'avance pour vos éclaircissements !
J'essaie de réaliser un script en shell (bin/sh) qui chercherais dans un fichier xml des balises précises, et supprimerais leur contenu.
Par exemple :
<titi cette ligne serait à supprimer timestamp="2013-07-23"> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> </titi>
Dans cette exemple, je souhaiterais détecter l'ouverture de balise titi et supprimer son contenu en gros supprimer toute cette ligne :
<titi cette ligne serait à supprimer
timestamp="2013-07-23">
Une fois ça fait, je rechercherais la balise </titi> et la supprimerais également.
j'ai fait plusieurs essais mais infructueux, notamment avec la commande sed,
Merci d'avance pour vos éclaircissements !
A voir également:
- [Shell] Detection de mots dans fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Classic shell - Télécharger - Personnalisation
3 réponses
Salut,
Tes balises à supprimer seront toujours sur 2 lignes ou elles sont aussi susceptibles de n'être que sur une seule ?
Tes balises à supprimer seront toujours sur 2 lignes ou elles sont aussi susceptibles de n'être que sur une seule ?
Bonjour zipe31,
c'est bien là qu'est mon soucis, en fonction des différents xml, elles peuvent être sur une deux ou même 4 lignes ...
c'est bien là qu'est mon soucis, en fonction des différents xml, elles peuvent être sur une deux ou même 4 lignes ...
Qu'à cela ne tienne ;-))
$ cat plop <titi cette ligne serait à supprimer timestamp="2013-07-23"> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> </titi> <titi cette ligne serait à supprimer timestamp="2013-07-23"> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> </titi> $ sed '/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/titi>/d' plop <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> $
Re tous le monde,
Du coup j'ai testé un peu les "limites" de sed, et j'ai un cas ou mon sed :
enfaite quand mon entête xml est de ce genre :
ça marche, en revanche si je modifie mon entete comme ça par exemple :
(tout sur une ligne) mon sed ne fait rien ... j'ai essayé aussi de le mettre dans une variable mais rien aussi...
Si quelqu'un à une réponse, ou une piste ! :-)
Du coup j'ai testé un peu les "limites" de sed, et j'ai un cas ou mon sed :
sed '/^<?xml .*?>$/d;/^<?xml /,/?>$/d;/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/taleo>/d' maSource.xml >>monXml.xml
enfaite quand mon entête xml est de ce genre :
<?xml version="1.0" encoding="UTF-8"?> <balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00">
ça marche, en revanche si je modifie mon entete comme ça par exemple :
<?xml version="1.0" encoding="UTF-8"?><balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00">
(tout sur une ligne) mon sed ne fait rien ... j'ai essayé aussi de le mettre dans une variable mais rien aussi...
Si quelqu'un à une réponse, ou une piste ! :-)
Bizarre chez moi ça marche :
$ cat plop -n 1 <?xml version="1.0" encoding="UTF-8"?> 2 <balise1 xmlns="" 3 timestamp="2013-07-23T12:00:25.944+02:00"> 4 <toto> 5 <bla> blablablalbla</bla> 6 <blo> 1111111111</blo> 7 </toto> 8 9 <toto> 10 <bla> blablablalbla</bla> 11 <blo> 1111111111</blo> 12 </toto> 13 </balise1> 14 15 <?xml version="1.0" encoding="UTF-8"?><balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00"> $ sed -n '/^<?xml/,/timestamp=/p' plop <?xml version="1.0" encoding="UTF-8"?> <balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00"> <?xml version="1.0" encoding="UTF-8"?><balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00"> $
Oups j'ai cru que "moim" et "yacleouf" était une seule et même personne (sauf que moim n'était pas connecté, ça arrive souvent), toutes mes plates ;-((
@moim : T'es gentil, la prochaine fois ouvre un autre sujet, merci.
@yacleouf : Normal, la syntaxe n'est pas bonne:
@moim : T'es gentil, la prochaine fois ouvre un autre sujet, merci.
@yacleouf : Normal, la syntaxe n'est pas bonne:
$ cat plop <?xml version="1.0" encoding="UTF-8"?> <balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00"> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> </balise1> <?xml version="1.0" encoding="UTF-8"?><balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00"> $ sed '/^<?xml .*[^?]>$/d;/^<?xml /,/">/d' plop <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> <toto> <bla> blablablalbla</bla> <blo> 1111111111</blo> </toto> </balise1> $