想象一下,我在shell脚本中有一个包含XML字符串的变量。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smil systemRequired="pss6" xmlns="http://www.w3.org/2001/SMIL20/Language"
xmlns:pss6="http://www.3gpp.org/SMIL20/PSS6/">
<head>
<meta id="meta-smil1.0-a" name="Publisher" content="OMA"/>
<layout>
<root-layout width="100%" height="100%"/>
<region id="UP" top="0%" left="0%" height="50%" width="100%" fit="meet" backgroundColor="white"/>
<region id="DOWN" top="50%" left="0%" height="50%" width="100%" fit="meet" backgroundColor="white"/>
<region id="FULL" top="0%" left="0%" height="100%" width="100%" fit="meet" backgroundColor="white"/>
</layout>
</head>
<body>
<par index="0" dur="10" size="29201">
<img src="b964bdb7-1756-4c41-b3ba-6b2aeb1f5f96" region="DOWN" fill="freeze" size="12473"/>
<text src="test [url]" region="UP" size="10"/>
<audio src="88f6111c-f260-4042-8366-76a9e4c44417" size="16718"/>
</par>
</body>
</smil>
我想检索<image>
和<audio>
标签的src属性值,因此我希望输出如下所示
b964bdb7-1756-4c41-b3ba-6b2aeb1f5f96
88f6111c-f260-4042-8366-76a9e4c44417
答案 0 :(得分:0)
这是一个可能满足您需求的快速解决方案(我认为XML文件位于file.xml
中,而不是变量中):
cat file.xml | tr "<" "\n" | grep -E "^(img|audio)" | sed -Ee "s/^.*src=\"([^\"]+)\".*$/\1/g"
tr "<" "\n"
:确保每个HTML标签都位于单独的行中(<
同时被删除,但这不是问题,因为我们希望最后将其删除)grep -E "^(img|audio)"
:仅保留img
和audio
行sed -Ee "s/^.*src=\"([^\"]+)\".*$/\1/g"
:删除... src="
之前和"...
之后的字符串,以便仅保留src内容(正则表达式的捕获组#1)一旦执行grep
命令,我们将得到以下结果:
img src="b964bdb7-1756-4c41-b3ba-6b2aeb1f5f96" region="DOWN" fill="freeze" size="12473"/>
audio src="88f6111c-f260-4042-8366-76a9e4c44417" size="16718"/>
执行sed
命令后,我们将获得您期望的结果:
b964bdb7-1756-4c41-b3ba-6b2aeb1f5f96
88f6111c-f260-4042-8366-76a9e4c44417