[Shell] Detection de mots dans fichier

Résolu/Fermé
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 - 25 juil. 2013 à 11:42
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 26 juil. 2013 à 16:32
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 :

<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:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
25 juil. 2013 à 11:52
Salut,

Tes balises à supprimer seront toujours sur 2 lignes ou elles sont aussi susceptibles de n'être que sur une seule ?
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
25 juil. 2013 à 12:11
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 ...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
25 juil. 2013 à 12:19
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>

$
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
25 juil. 2013 à 13:43
Je vais test ça de suite !
est ce qu'à la fin de cette ligne :
$ sed '/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/titi>/d' plop
je peux faire une redirection de ce style ? :
$ sed '/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/titi>/d' plop >> monXml.xml 
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
25 juil. 2013 à 13:49
Oui.

Mais tu peux aussi faire avec l'option "w" (write) de sed :

sed '/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/titi>/d;w fichier.xml' plop
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
25 juil. 2013 à 14:18
zipe c'est nikel ça marche comme il le faut, par contre, saurait tu comment faire pour ne pas voir le traitement à l'écran ? est ce que c'est à cause de l'option w ?
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
25 juil. 2013 à 14:27
Sachant qu'en plus je vais répéter cette opération sur plusieurs autres fichiers en entrées, mais je garde la même sortie
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
26 juil. 2013 à 14:50
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 ! :-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
26 juil. 2013 à 15:01
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">

$ 
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
26 juil. 2013 à 15:13
oui j'ai essayé cette façon ça marche, sauf que mon soucis n'est pas le même que moim,
moi je supprime les lignes d'entêtes :
sed '/^<?xml .*?>$/d;/^<?xml /,/?>$/d;/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/taleo>/d' maSource.xml >>monXml.xml
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
26 juil. 2013 à 15:26
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>


$
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
26 juil. 2013 à 15:45
j'ai jamais posté sans être connecté :)
Je vais test ton petit bout ! Merci encore :)
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
26 juil. 2013 à 16:01
Et voilà conclusion, ça marche aussi !
en tout cas l'intervention de moim m'aura permis d'avoir un petit bout de code à garder sous le coude !

Merci encore Zipe !
0