[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   -
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   Statut Contributeur Dernière intervention   6 431
 
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   Statut Membre Dernière intervention   39
 
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   Statut Contributeur Dernière intervention   6 431
 
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   Statut Membre Dernière intervention   39
 
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   Statut Contributeur Dernière intervention   6 431
 
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   Statut Membre Dernière intervention   39
 
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   Statut Membre Dernière intervention   39
 
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   Statut Membre Dernière intervention   39
 
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   Statut Contributeur Dernière intervention   6 431
 
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   Statut Membre Dernière intervention   39
 
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   Statut Contributeur Dernière intervention   6 431
 
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   Statut Membre Dernière intervention   39
 
j'ai jamais posté sans être connecté :)
Je vais test ton petit bout ! Merci encore :)
0
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   39
 
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