我有一个文件,它不断附加以下xml。我想从变量中得到的是jobStatus中的percentComplete。我该怎么得到它?不知道如何解析xml。我尝试使用XMLStarlet,但失败了。我想在一个可以在shell中使用的变量中获得percentComplete。
<batchStatus name="" submissionTime="1/23/12 10:00:26 AM" sentBy="mike"
timeElapsed="43 second(s)" timeRemaining="4 minute(s)" timeElapsedSeconds="43"
timeRemainingSeconds="294" percentComplete="12" resumePercentComplete="0"
status="Processing" batchid="FD66DC21-6AA4-47FB-A3F0-7300C7BDAB8A" /batchStatus>
<jobStatus name="file.mov" submissionTime="1/23/12 10:00:26 AM" sentBy="mike"
jobType="Compressor" priority="HighPriority" timeElapsed="43 second(s)"
timeRemaining="4 minute(s)" timeElapsedSeconds="43" timeRemainingSeconds="294"
percentComplete="12" resumePercentComplete="0" status="Processing: Transcoding"
jobid="FDF1A488-51B9-4B9A-908B-FD5D95CE7E92"
batchid="FD66DC21-6AA4-47FB-A3F0-7300C7BDAB8A" /jobStatus>
你可以试试这样的东西-
var=$(awk -v FS="[ ="]" '/^<jobStatus/,//jobStatus>$/{for (i=1;i<=NF;i++) if ($i~/percentComplete/) print $(i+2)}' file | tail -n 1)
[jaypal:~/Temp] echo $var
12
在这里看到类似的帖子:使用unix终端解析XML
如果您不习惯XML/XXSLT,也不想学习解析它,那么您可以做一些非常肮脏的事情,并通过搜索来找出答案。
另一个选项。。。我建议使用Xerces解析器,但也有其他解析器。请查看上面的链接,因为上面提到了这两种技术。