[Shell] Detection de mots dans fichier
Résolu
yacleouf
Messages postés
461
Statut
Membre
-
zipe31 Messages postés 38797 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 38797 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>
$