Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/01/2022, à 18:08

MDBeaver

Récupérer des infos d'un xml en bash [Résolu]

Bonjour à tous,

Je suis nouveau en Shell et j'aimerai avoir votre aide pour récupérer des données dans un fichier xml.
Mon xml se présente ainsi :

<mfp>
	<eBN18>
		<e-Studio 7516ACSeries type="clr">
			<MFP>7516AC</MFP>
			<MFP>6516AC</MFP>
			<MFP>5516AC</MFP>
		</e-Studio 7516ACSeries>
		<e-Studio 8518ASeries type="bw">
			<MFP>8518A</MFP>
			<MFP>7518A</MFP>
			<MFP>6518A</MFP>
			<MFP>5518A</MFP>
		</e-Studio 8518ASeries>
		<e-Studio 2510ACSeries type="clr">
			<MFP>2510AC</MFP>
			<MFP>2010AC</MFP>
		</e-Studio 2510ACSeries>
	</eBN18>
	<eBN16>
		<e-Studio 7506ACSeries type="clr">
			<MFP>7506AC</MFP>
			<MFP>6506AC</MFP>
			<MFP>5506AC</MFP>
		</e-Studio 7506ACSeries>
		<e-Studio 8508ASeries type="bw">
			<MFP>8508A</MFP>
			<MFP>7508A</MFP>
			<MFP>6508A</MFP>
			<MFP>5508A</MFP>
		</e-Studio 8508ASeries>
		<e-Studio 2500ACSeries type="clr">
			<MFP>2500AC</MFP>
			<MFP>2000AC</MFP>
		</e-Studio 2500ACSeries>
	</eBN16>
</mfp>

dans mon script, si l'utilisateur choisit par exemple un 6506AC, je voudrais pouvoir récupérer : séries = "e-Studio 7506ACSeries"
                                                                                                                                                       type = "clr"

Auriez-vous une idée de comment je peux faire?
J'ai déjà trouvé pas mal de choses sur le net mais rien qui me convienne. Je ne veux pas utiliser autre chose que le bash car je n'ai pas la possibilité d'installer quoi que ce soit, je suis certain que parmi vous il y aura quelqu'un pour m'aider avec des commandes de base du Bash (sed, grep....)
Pour info ce script doit fonctionner sur Mac (avec un bash 5 et sur Linux)

Merci à tous pour votre aide

Dernière modification par MDBeaver (Le 25/01/2022, à 17:01)

Hors ligne

#2 Le 24/01/2022, à 18:35

erresse

Re : Récupérer des infos d'un xml en bash [Résolu]

Bonjour,
Modère tes ardeurs, un seul message suffit, les doubles ou triples ne sont pas admis sur le forum...
Tu vas t'attirer les foudres des modérateurs.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 24/01/2022, à 18:46

xubu1957

Re : Récupérer des infos d'un xml en bash [Résolu]

Bonjour,

Comme demandé dans le premier message du tutoriel Retour utilisable de commande

Pour ajouter toi-même les balises code à ton précédent message #1 :           Merci                   wink

Voir règles du forum > balises BB code

Balise CODE :

C'est la balise à utiliser pour donner de longs messages d'erreurs, des contenus de fichiers de configuration, des commandes à taper, etc … Elle permet des messages plus "compacts", et est moins ambiguë que d'autres polices sur certains caractères.

Dernière modification par xubu1957 (Le 25/01/2022, à 17:01)


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Résolu] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

En ligne

#4 Le 24/01/2022, à 20:10

MDBeaver

Re : Récupérer des infos d'un xml en bash [Résolu]

Désolé, je ne sais pas ce qui s’est passé mais je n’ai posté cette demande qu’à un seul endroit, ici. Je ne sais pas comment mon post s’est retrouvé aux 2autres endroits

Hors ligne

#5 Le 25/01/2022, à 08:39

pingouinux

Re : Récupérer des infos d'un xml en bash [Résolu]

Bonjour,
Voici une propostion, à adapter.

$ cat mon_script 
while read lig
do
   grep -q "<e-Studio .*Series type=.*>" <<<"$lig" && titre=$lig
   grep -q "<MFP>$2</MFP>" <<<"$lig" && echo "$titre"
done <"$1"

À appeler ainsi

$ ./mon_script fichier.xml 6506AC
<e-Studio 7506ACSeries type="clr">

Ajouté :
Ou bien

while read lig
do
   grep -q "<e-Studio .*Series type=.*>" <<<"$lig" && titre=$lig
   grep -q "<MFP>$2</MFP>" <<<"$lig" && sed -r 's/<(e-Studio .*Series) (type)=(.*)>/séries = "\1"\n\2 = \3/' <<<"$titre"
done <"$1"
$ ./mon_script fichier.xml 6506AC
séries = "e-Studio 7506ACSeries"
type = "clr"

Dernière modification par pingouinux (Le 25/01/2022, à 08:55)

Hors ligne

#6 Le 25/01/2022, à 09:20

Watael

Re : Récupérer des infos d'un xml en bash [Résolu]

le XML se traite avec un parser xml (xmlstarlet, xalan...), parce que les langages à balises (html, xml, json...) n'ont aucune obligation de respecter le moindre format autre que leur syntaxe : il peut y avoir des lignes vides, des tabulations, des espaces entre les balises, dans les balises...8O

@pingouinux : grep | sed , c'est mal.
tu vas finir sous le bureau de la maîtresse, et elle n'a pas pris de douche. Toujours tenté ? lol

Dernière modification par Watael (Le 25/01/2022, à 09:21)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 25/01/2022, à 10:08

MicP

Re : Récupérer des infos d'un xml en bash [Résolu]

Bonjour

Dans son message #1, MDBeaver a écrit :

…Je ne veux pas utiliser autre chose que le bash car je n'ai pas la possibilité d'installer quoi que ce soit…

Pour info, je précise qu'il n'y a pas que le shell bash qui est installé par défaut sur un système ubuntu,
il y en a beaucoup d'autres parmi lesquels : python

michel@ubu20043lts:~$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help()

Welcome to Python 3.8's help utility!

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.8/tutorial/.

Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To quit this help utility and
return to the interpreter, just type "quit".

To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics".  Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".

help> quit

You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)".  Executing "help('string')"
has the same effect as typing a particular string at the help> prompt.
>>> quit()
michel@ubu20043lts:~$ 

Donc, il te faudrait charger dans cet interpréteur de commandes un des nombreux modules existants
pour pouvoir parser ton fichier xml

Dernière modification par MicP (Le 25/01/2022, à 10:17)

Hors ligne

#8 Le 25/01/2022, à 10:26

pingouinux

Re : Récupérer des infos d'un xml en bash [Résolu]

Watael #6 a écrit :

@pingouinux : grep | sed , c'est mal.

Oui, mais ici c'est grep ... && sed ..., grep et sed ne s'appliquent pas à la même chaîne de caractères.

La prochaine fois, j'ajouterai un evalsmile

Édité

Dernière modification par pingouinux (Le 25/01/2022, à 10:28)

Hors ligne

#9 Le 25/01/2022, à 10:59

Watael

Re : Récupérer des infos d'un xml en bash [Résolu]

pingouinux a écrit :

Oui, mais ici c'est grep ... && sed ..., grep et sed ne s'appliquent pas à la même chaîne de caractères.

ah, j'ai mal lu. désolé.
mais non, plutôt pas grep, mais plutôt

[[ $ligne =~ $rgx ]] && sed ...

, et pareil pour titre="$ligne".

La prochaine fois, j'ajouterai un evalsmile

je crois que la maîtresse porte des sandales en peau de chèvre... penses-y. smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 25/01/2022, à 11:51

bruno

Re : Récupérer des infos d'un xml en bash [Résolu]

Pour appuyer la réponse en #6 :
http://mywiki.wooledge.org/BashFAQ/113

Hors ligne

#11 Le 25/01/2022, à 17:00

MDBeaver

Re : Récupérer des infos d'un xml en bash [Résolu]

Merci à tous pour vos réponses.
@MicP : dans mon message #1 j'ai dit que j'étais sur Mac, en effet ce script doit pouvoir fonctionner sur Mac et sous différentes distributions de Linux et je ne suis pas certain de trouver Python systématiquement installé sur les ordinateurs concernés.
@Pingouinux : super tes deux scripts fonctionnent à merveille (si ce n'est que chez moi il ne tient pas compte du retour à la ligne et que l'option -r n'existe pas pour sed (en fait c'est -E) mais il faut bien qu'il me reste un peu de travail à faire et comme tu l'as dit c'est à adapter !!

En tout cas merci à tous, je passe en résolu car la solution donnée me convient parfaitement

Hors ligne

#12 Le 25/01/2022, à 17:32

MicP

Re : Récupérer des infos d'un xml en bash [Résolu]

MDBeaver a écrit :

… je ne suis pas certain de trouver Python systématiquement installé sur les ordinateurs concernés. …

Il y a beaucoup plus de scripts python qu'on ne le pense dans les distributions Linux,
et je ne pense pas qu'il en existe beaucoup qui n'aient pas d'interpréteur de commande python installé par défaut.

Depuis la version 10.8 de mac OS X (Mountain Lion), Python 2.7 est pré-installé par défaut.

Dernière modification par MicP (Le 25/01/2022, à 17:33)

Hors ligne

#13 Le 25/01/2022, à 21:16

MDBeaver

Re : Récupérer des infos d'un xml en bash [Résolu]

MicP a écrit :

Depuis la version 10.8 de mac OS X (Mountain Lion), Python 2.7 est pré-installé par défaut.

C’est bien là qu’est le problème, je peux être amené à utiliser le script sur des postes qui sont sous MacOS 10.6 (voire jusqu’à 10.4), c.est pour cela que je préfère utiliser la solution de Pingouinux (d.autant plus que je ne connais pas Python - je sais, il faut que je m’y mette).

Merci de tes conseils

Hors ligne

#14 Le 25/01/2022, à 22:39

MicP

Re : Récupérer des infos d'un xml en bash [Résolu]

Ah oui, alors là, pas le choix
(Pas d'bras, pas d'chocolat.)

Hors ligne