comment récupérer une valeur entre guillemets doubles avec plusieurs guillemets en ligne à l'aide de sed

0

J'essaie d'utiliser sed pour récupérer la valeur de 'identificateur' à partir de la ligne ci-dessous, qui est la chaîne 'TestStudioJobResponseMessages' dans l'exemple ci-dessous. Je ne souhaite pas non plus utiliser la chaîne uuid dans mon expression sed, car certaines lignes pourraient ne pas en avoir. Donc, idéalement, ce que je recherche, c’est la valeur entre la 1ère paire de guillemets doubles après le mot "identifier =".

sed -n 's/.\*identifier=\"\(.\*\)\" .*/\1/p'

ce qui résulterait tout jusqu'à la fin de la ligne.

sibres de qualité

shuklaa02
la source

Réponses:

0

Vous semblez traiter un fichier XML. Utilisez un outil de gestion XML approprié, par exemple xsh :

open file.xml ;
register-namespace sr http://www.ibm.com/websphere/appserver/schemas/6.0/sibresources.xmi ;
for //sr:SIBQueue echo @identifier ;
choroba
la source
Merci pour l’option, son fichier xml utilise toutefois cygwin sur une machine Windows, donc xsh ne sera pas là, donc avec cygwin bash shell, et à la recherche d’une alternative séd
shuklaa02
J'utilise aussi la bash de cygwin. xsh peut être installé par cpan XML::XSH2 (vous avez besoin de libxml et de Perl).
choroba
Merci cependant, je dois fournir un script aux utilisateurs qui ne voudraient pas installer xsh / perl, cherchant ainsi une option plus simple d'utilisation de bash
shuklaa02
0

Utiliser GNU sed:

sed -r 's/.*identifier="([a-zA-Z]+)".*/\1/'

OU

sed -r 's/.*identifier="([^"]+)".*/\1/'
Guru
la source