如何使用 sed 在一行中检索多个双引号之间的值

如何使用 sed 在一行中检索多个双引号之间的值

我尝试使用 sed 从下面的行中检索“identifier”的值,即下面的示例中的字符串“TestStudioJobResponseMessages”,而且我不想在 sed 表达式中使用字符串 uuid,因为有些行可能没有这个字符串。所以理想情况下,我要查找的是“identifier=”后第一对双引号之间的值

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

这将导致一切结果直到行尾。

sibresources:SIBQueue xmi:id="SIBQueue_1298124464618" 标识符="TestStudioJobResponseMessages" uuid="8CC71271B2F1D3CF65984403" 描述="" overrideOfQOSByProducerAllowed="true" maxFailedDeliveries="100" 异常目的地="$DEFAULT_EXCEPTION_DESTINATION" sendAllowed="true" 接收允许="true"

答案1

您似乎正在处理 XML 文件。请使用适当的 XML 处理工具,例如西沙

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/'

相关内容