Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1981 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Parser basique en bash (sed ??)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parser basique en bash (sed ??)

n°1106255
bakastef
Posté le 21-01-2009 à 19:04:41  profilanswer
 

Salut les gens  :hello:  :bounce:  
 
voila, j'ai un script bash qui lance un command SOAPsh (client webservice soap) et stock le retour dans une variable.
 
Cette variable contient une sorte de xml, un truc qui ressemble à ca:
 

Code :
  1. <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:myselfcare" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  2.    <SOAP-ENV:Body>
  3.       <ns1:ExecuteCommandResponse>
  4.          <return xsi:type="xsd:string">
  5.             <LICENSE_REQUESTS>
  6.                 <LICENSE> <PK>34</PK>
  7.                 <EMAIL>mail@mail.com<EMAIL>
  8.                 <DATA> ici plein de données intéressantes ....</DATA>
  9.            </LICENSE>
  10.            <LICENSE_REQUESTS>
  11.                 <LICENSE> <PK>35</PK>
  12.                 <EMAIL>mail@mail.fr<EMAIL>
  13.                 <DATA> ici plein de données intéressantes ....</DATA>
  14.            </LICENSE>
  15.        </LICENSE_REQUESTS>
  16.       </return>
  17.       </ns1:ExecuteCommandResponse>
  18.    </SOAP-ENV:Body>
  19. </SOAP-ENV:Envelope>


 
 
Je suis tout jeune "basher" / "bashelier" et surtout tout pas bon en bash, et j'essai de "parser" mon xml pour recupérer le contenu des la balises <PK >, créer des fichiers qui s'appellent $PK_license.txt, et qui contiendraient ce qu'il y a dans les balises <DATA>
 
Je suis sûr que ca se fait en 3 lignes de codes avec 2-3 sed imbiqués ... mais j'y arrive pas.  
J'ai essayé avec des while en parcourant ma chaine de caractères et j'ai perdu 2h de boulot.
 
 
Quelqu'un pourrait-il m'aider?   :??:   :heink:  
 
Meci d'avance. :hello:


Message édité par bakastef le 21-01-2009 à 19:06:46
mood
Publicité
Posté le 21-01-2009 à 19:04:41  profilanswer
 

n°1106260
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 21-01-2009 à 19:19:34  profilanswer
 

utiliser un vrai langage de script serait nettement plus adapté


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1106269
e_esprit
Posté le 21-01-2009 à 20:16:20  profilanswer
 

Tu veux plutot dire "utiliser un vrai langage de programmation"  :D
 
=> Python, Perl, Ruby...


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1106300
bakastef
Posté le 21-01-2009 à 22:06:14  profilanswer
 

Ben comme j'utilise un client soap que je pilote en bash, et que je me retrouve avec mon XML ds une variable, je me dit que c'est con de développer une appli faites ds un autre langage, pour revenir utiliser le client soap après...
 
Je l'ai pas précisé dans le message initial, mais le but étant de sauver le les données <DATA> dans un fichier, de générer une clé de licence et de la coller dans ces fichiers, à partir d'une appli de cryptage, puis de renvoyer ces licences en soap au serveur qui en a fait la demande.
 
 
De plus en voyant des gars faire en gros ce que je voulais en quelques lignes (exemple http://forum.ubuntu-fr.org/viewtopic.php?id=121833) je me suis dit que ca serait pas mal.


Message édité par bakastef le 21-01-2009 à 22:10:51
n°1106310
e_esprit
Posté le 21-01-2009 à 22:21:24  profilanswer
 

Le truc c'est que bash pour parser du XML... :/
 
Enfin la c'est pas bien compliqué, mais en SED, si tu ne maitrises pas (ce qui semble etre le cas) le jour ou tu feras evoluer ton script d'un poil, tu perdras encore des heures pour un truc qui aurait été tout con avec un vrai langage :spamafote:


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1106312
e_esprit
Posté le 21-01-2009 à 22:22:13  profilanswer
 

Et je parle meme pas des effets de bord :D


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1106408
zeblods
Posté le 22-01-2009 à 09:04:12  profilanswer
 

Tu fais une boucle while et pour chaque ligne tu fais un truc du genre :
 

pk=$(echo $line | sed "s/^.*<PK>\(.*\)<\/PK>.*$/\1/" )


Avec $line la variable contenant uniquement la ligne courante, tu auras le résultat dans $pk
 
À toi d'adapter pour data (suffit de remplacer PK par DATA...)

n°1106411
Hrolf
Posté le 22-01-2009 à 09:48:17  profilanswer
 

Je pencherais plutôt pour du awk si on veut reste dans les commandes système :o
 
cat $fichier  | awk 'BEGIN { F=0 }/<LICENSE>/ { F=1 }/<DATA>/ { if(F==1) print $tesdonnés }'
 
Bon c'est un début après faut repasser la variable F à 0 après </LICENSE> mais là j'ai pas le temps :p


---------------
Il y a trois sortes de mensonges : les mensonges, les gros mensonges et les statistiques !
n°1106412
e_esprit
Posté le 22-01-2009 à 09:48:52  profilanswer
 

Et si ce qui se trouve dans DATA tient sur plusieurs lignes ? [:cerveau dr]


Message édité par e_esprit le 22-01-2009 à 09:53:43

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1106414
Hrolf
Posté le 22-01-2009 à 09:52:35  profilanswer
 

C'est pas censé être le cas mais effectivement, on peut faire 2 variable sinon 1 pour LICENSE et l'autre Pour DATA quand les 2 sont à 1 on prends les lignes quand on en passe 1 à 0 on stop :p
 
Mais bon ça reste du bricolage en bash quoi :D


---------------
Il y a trois sortes de mensonges : les mensonges, les gros mensonges et les statistiques !
mood
Publicité
Posté le 22-01-2009 à 09:52:35  profilanswer
 

n°1106415
e_esprit
Posté le 22-01-2009 à 09:53:31  profilanswer
 

Voila, c'est du bricolage :D


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1106417
bakastef
Posté le 22-01-2009 à 10:19:09  profilanswer
 

Le contenu de <DATA> tiens effectivement sur plusieurs lignes.
Encore un truc qui aide pas :(

n°1106418
e_esprit
Posté le 22-01-2009 à 10:36:08  profilanswer
 

Python + SAX : ftp://ftp.logilab.org/pub/talks/python-uk-2002.pdf
 
A mon avis c'est pas beaucoup plus complexe à comprendre qu'une ligne de sed :D


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°1106429
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 22-01-2009 à 11:08:53  profilanswer
 

ruby + rexml :o


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1106433
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 22-01-2009 à 11:11:27  profilanswer
 

http://hfr-rehost.net/www.ruby-lang.org/images/logo.gif


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1111328
sputnick
bip...bip...bip...bip...bi...b
Posté le 08-02-2009 à 23:01:13  profilanswer
 

perl + XML::Simple :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Parser basique en bash (sed ??)

 

Sujets relatifs
Partimage coté serveur, bash: partimaged: command not foundScript bash: Permission non accordée !?
[bash] Recuperer des données d'une base MYSQL[BASH] Amélioration de script (boucle et autre)
[bash] effectuer un ls sans afficher chemin des fichiers[bash] trouver le fichier le plus recent dans un dossier avec find
[bash] commande lors de l'ouverture d'un terminalBASH - Date de la veille sous FreeBSD
execution de grep dans un bashparser de fichier suoders
Plus de sujets relatifs à : Parser basique en bash (sed ??)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR