在unix中从xml标记获取值到逗号分隔的文本文件

时间:2018-05-02 05:55:50

标签: python shell unix sh aix

我们有xml文件,其中包含在机器上运行的不同进程的xml标记。我想获取所有进程的名称以及它的start,stop命令,并将其保存为每个进程的逗号分隔。

  

文件中的一个标记示例位于之下: -

< PROCESS NAME =“匿名”TEMP =“否”>

<描述> Bla Bla Bla< / Description>

<日志文件> $ {PROCESS_LOG}< / LogFile>

<用户=“ABC”>

<开始>

<命令> STARTPROCESS< / Command>

<参数> 12< /参数>

< /开始>

<停止>

<命令> STOPPROCESS< / Command>

< /停止>

< SearchCriteria>

< ExeName =“SREACH12”>

<参数> PROCESS12< /参数>

< / ExeName>

< / SearchCriteria>

< /用户>

< / PROCESS>

*

  

我想在文本文件中输出如下: -

  • 匿名,STARTPROCESS 12,STOPPROCESS,SREACH12 PROCESS12

请注意,文件中有多个这样的标签,所以我希望所有这些标签与上面相同。 shell中的东西也会起作用。请帮忙。

1 个答案:

答案 0 :(得分:0)

使用re。

import re
text ='< PROCESS NAME="Anonymous" TEMP="No" > \
< Description>Bla Bla Bla< /Description > \
< LogFile>${PROCESS_LOG}< /LogFile >\
< User="ABC" >\
< Start >\
< Command>STARTPROCESS< /Command >\
< Parameters>12< /Parameters >\
< /Start >\
< Stop >\
< Command>STOPPROCESS< /Command >\
< /Stop >\
< SearchCriteria >\
< ExeName="SREACH12" >\
< Parameters>PROCESS12< /Parameters >\
< /ExeName >\
< /SearchCriteria >\
< /User >'

# Target: Anonymous,STARTPROCESS 12,STOPPROCESS,SREACH12 PROCESS12

pName =  re.findall(r'PROCESS NAME="(.+?)" TEMP', text)
commands =  re.findall(r'< Command>(.+?)< /Command >', text)
params =  re.findall(r'< Parameters>(.+?)< /Parameters >', text)
exeName =  re.findall(r'< ExeName="(.+?)" >', text)

myOutput = pName[0]+","+commands[0]+" "+params[0]+","+commands[1]+","+exeName[0]+" "+params[1]
print(myOutput)

打印:

Anonymous,STARTPROCESS 12,STOPPROCESS,SREACH12 PROCESS12