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

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 ;

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/'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.