jak pobrać wartość między podwójnymi cudzysłowami z wieloma podwójnymi cudzysłowami w linii za pomocą sed

0

Próbuję użyć sed do pobrania wartości „identyfikatora” z dolnej linii, która jest ciągiem „TestStudioJobResponseMessages” w poniższym przykładzie, a także nie chcę używać ciągu znaków uuid w moim wyrażeniu sed, ponieważ niektóre wiersze mogą tego nie mieć. Idealnie więc szukam wartości między pierwszą parą podwójnych cudzysłowów po 'identifier ='

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

co spowodowałoby wszystko do końca linii.

sibresources: SIBQueue xmi: id = "SIBQueue_1298124464618" identyfikator = "TestStudioJobResponseMessages" uuid = "8CC71271B2F1D3CF65984403" opis = "" overrideOfQOSByProducerAllowed = 100% "true" otrzymany

Arvind Shukla
źródło

Odpowiedzi:

0

Wygląda na to, że przetwarzasz plik XML. Użyj odpowiedniego narzędzia obsługi XML, np. Xsh :

open file.xml ;
register-namespace sr http://www.ibm.com/websphere/appserver/schemas/6.0/sibresources.xmi ;
for //sr:SIBQueue echo @identifier ;
choroba
źródło
Dzięki za opcję, jego plik xml używa jednak cygwina na komputerze z systemem Windows, więc xsh go nie będzie, dlatego używa powłoki bash cygwin i szuka alternatywnej wersji
Arvind Shukla
Używam też cygwina. xshmoże zostać zainstalowany przez cpan XML::XSH2(potrzebujesz libxml i Perl).
choroba
Dzięki jednak muszę udostępnić skrypt użytkownikom, którzy nie chcieliby instalować xsh / perl, więc szukają prostszej opcji korzystania z bash
Arvind Shukla
0

Za pomocą GNU sed:

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

LUB

sed -r 's/.*identifier="([^"]+)".*/\1/'
Guru
źródło