sed を使用して、複数の二重引用符を含む二重引用符の間の値を取得する方法

sed を使用して、複数の二重引用符を含む二重引用符の間の値を取得する方法

私は以下の行から 'identifier' の値を取得するために sed を使用しようとしています。これは以下の例では文字列 'TestStudioJobResponseMessages' です。また、一部の行には文字列 uuid が含まれていない可能性があるため、sed 式では文字列 uuid を使用したくありません。したがって、理想的には、私が探しているのは 'identifier=' の後の最初の二重引用符のペアの間の値です。

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

行の終わりまですべてが実行されます。

sibresources:SIBQueue xmi:id="SIBQueue_1298124464618" 識別子="TestStudioJobResponseMessages" uuid="8CC71271B2F1D3CF65984403" 説明="" overrideOfQOSByProducerAllowed="true" maxFailedDeliveries="100" exceptionDestination="$DEFAULT_EXCEPTION_DESTINATION" sendAllowed="true" receiveAllowed="true"

答え1

XMLファイルを処理しているようです。適切なXML処理ツールを使用してください。例:xsh:

open file.xml ;
register-namespace sr http://www.ibm.com/websphere/appserver/schemas/6.0/sibresources.xmi ;
for //sr:SIBQueue echo @identifier ;

答え2

GNU sed を使用する場合:

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

または

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

関連情報