[Shell] Detection de mots dans fichier [Résolu/Fermé]

Signaler
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
-
Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
-
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 !



3 réponses

Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
5 155
Salut,

Tes balises à supprimer seront toujours sur 2 lignes ou elles sont aussi susceptibles de n'être que sur une seule ?
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
34
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 ...
merci pour vos réponse,
zipe pour moi ça marche pas, enfin ça m'extrait tout mon fichier sauf mes lignes !?
var=$(sed '/^<?xml* .*>$/d;/^<balise1 /,/>$/d;/^<\/balise1>/d' myXml.xml)
sachant que <?xml* .*> pour moi est sur une seule ligne, et que balise1 peut être sur une ou plusieurs lignes ...
merci
Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
5 155
On peut avoir un extrait de ton fichier afin de faire des tests ?
voilà :
<?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>


le résultat attendu (dans mon cas) serait :
Var="<?xml version="1.0" encoding="UTF-8"?><balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00">" en une seule ligne

j'espère que sa suffira ?
Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
5 155
Forcément que ça ne marche pas ;-(

D'abord tu demandes à supprimer certaines balises (commande "d" pour delete de sed) et ensuite tu essaies d'appliquer cette syntaxe (qui supprimes je le rappelle) pour garder des motifs correspondants à des regex, donc c'est normal que tu dises :
pour moi ça marche pas, enfin ça m'extrait tout mon fichier sauf mes lignes !?

En se référant à ton exemple, et sous condition que tes fichiers se présentent tous de la même façon :

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


$ sed -n '/^<?xml/,/timestamp=/p' plop 
<?xml version="1.0" encoding="UTF-8"?>
<balise1 xmlns=""
       timestamp="2013-07-23T12:00:25.944+02:00">

$ var=$(sed -n '/^<?xml/,/timestamp=/p' plop) 

$ echo $var
<?xml version="1.0" encoding="UTF-8"?> <balise1 xmlns="" timestamp="2013-07-23T12:00:25.944+02:00">

$

Attention à l'importance de quoiter ou pas la variable pour l'echo.
echo $var
et
echo "$var"
ne produise pas le même résultat...
Effectivement j'avais bêtement recopié cette ligne :
var=$(sed '/^<titi .*>$/d;/^<titi /,/>$/d;/^<\/titi>/d' plop)
du coup ça marche mieux, merci à toi !
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
34
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 ! :-)
Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
5 155
en tout cas l'intervention de moim
Tu dois quand même le connaître un peu non ? ;-\
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
34
heuu non ?
Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
5 155
Euh... si, les messages émanent de la même IP ;-\
Messages postés
438
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
8 juin 2015
34
aah ! et bien c'est quelqu'un qui doit être dans mon entreprise qui l'a posté alors !
:-)

@Moim tu peu me mp ?
Messages postés
39355
Date d'inscription
dimanche 7 novembre 2010
Statut
Non membre
Dernière intervention
2 juin 2020
5 155
aah ! et bien c'est quelqu'un qui doit être dans mon entreprise qui l'a posté alors !
:-)

Je préfère ça ;-)

@Moim tu peu me mp ?
Il n'est pas inscrit, il ne peut pas ;-(