我有一个多行如下的XML文件(我只关心以SOURCE开头的行)
SOURCE BUSINESSNAME ="" DATABASETYPE ="Oracle" DBDNAME ="OrclExp11g" DESCRIPTION ="" NAME ="EMPLOYEES" OBJECTVERSION ="1"
SOURCE BUSINESSNAME ="" DATABASETYPE ="Oracle" DBDNAME ="OrclExp11g" DESCRIPTION ="" NAME ="HR" OBJECTVERSION ="1"
在以SOURCE开头的每一行中,我需要获得3个字符串并将它们写入另一个文件,如下所示。
甲骨文,OrclExp11g,EMPLOYEES
甲骨文,OrclExp11g,HR
sed -n -e '/SOURCE /p' InputFile.XML | sed -r 's/.* NAME \=\"(.+)\" OBJECTVERSION \=\".*/\1/' > $Source_List.Out
我是使用SED的新手,但到目前为止我只能使用SED输出一个字符串。如果有人能帮助我如何获得3个字符串,我真的很感激。 非常感谢提前!
答案 0 :(得分:2)
如您猜测sed
是您的朋友,您可以使用\1
,\2
等替换匹配的正则表达式。
$ sed -nE '/SOURCE/{s/^.*DATABASETYPE ="([^"]*)".*DBDNAME ="([^"]*)".*NAME ="([^"]*)".*$/\1,\2,\3/;p}' file >outputfile
<强>输出强>
$ cat outputfile
Oracle,OrclExp11g,EMPLOYEES
Oracle,OrclExp11g,HR
备注强>
-E
启用扩展正则表达式。-n
会抑制正常输出。只会打印使用p
打印的行。