Parser basique en bash (sed ??) - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 21-01-2009 à 19:19:34
utiliser un vrai langage de script serait nettement plus adapté
Marsh Posté le 21-01-2009 à 20:16:20
Tu veux plutot dire "utiliser un vrai langage de programmation"
=> Python, Perl, Ruby...
Marsh Posté le 21-01-2009 à 22:06:14
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.
Marsh Posté le 21-01-2009 à 22:21:24
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
Marsh Posté le 21-01-2009 à 22:22:13
Et je parle meme pas des effets de bord
Marsh Posté le 22-01-2009 à 09:04:12
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...)
Marsh Posté le 22-01-2009 à 09:48:17
Je pencherais plutôt pour du awk si on veut reste dans les commandes système
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
Marsh Posté le 22-01-2009 à 09:48:52
Et si ce qui se trouve dans DATA tient sur plusieurs lignes ?
Marsh Posté le 22-01-2009 à 09:52:35
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
Mais bon ça reste du bricolage en bash quoi
Marsh Posté le 22-01-2009 à 09:53:31
Voila, c'est du bricolage
Marsh Posté le 22-01-2009 à 10:19:09
Le contenu de <DATA> tiens effectivement sur plusieurs lignes.
Encore un truc qui aide pas
Marsh Posté le 22-01-2009 à 10:36:08
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
Marsh Posté le 22-01-2009 à 11:08:53
ruby + rexml
Marsh Posté le 22-01-2009 à 11:11:27
Marsh Posté le 21-01-2009 à 19:04:41
Salut les gens
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:
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?
Meci d'avance.
Message édité par bakastef le 21-01-2009 à 19:06:46