[Shell] Detection de mots dans fichier
Résolu
yacleouf
Messages postés
461
Statut
Membre
-
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 34620 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 !
--
Google is your friend!
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 !
--
Google is your friend!
3 réponses
-
Salut,
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 ...
-
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 :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:
$ 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> $ -
-
-