如何在Linux中使用SED正则表达式从一行中提取多个字符串并将它们写入文件?

时间:2016-08-26 21:32:03

标签: linux sed

我有一个多行如下的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个字符串,我真的很感激。 非常感谢提前!

1 个答案:

答案 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启用扩展正则表达式。
  • 带有sed的
  • -n会抑制正常输出。只会打印使用p打印的行。