获取 XML 文件中的值 - 要求:必须在 bash/Unix 中完成

获取 XML 文件中的值 - 要求:必须在 bash/Unix 中完成

以下是我的 XML 文件的摘录:

<Value ProtectInMemory="True"> ytznnyg</Value><Value>arulmdbqtza01 </Value><Value>arulmrms </Value><Value>sys/system</Value>
<Value ProtectInMemory="True">kylfpo8</Value><Value>arulmdbqtza02 </Value><Value>arulmrib </Value><Value>sys/system </Value>
<Value ProtectInMemory="True" /><Value>arulmdbsoaa01 </Value><Value>arulmsoa</Value><Value />
<Value ProtectInMemory="True" /><Value>arulmdbsoaa01 </Value><Value>srulmsoa</Value><Value />

我现在想要的:

ytznnyg;arulmdbqtza01;arulmrms;sys/system
kylfpo8;arulmdbqtza02;arulmrib;sys/system
;arulmdbsoaa01;arulmsoa;
;arulmdbsoaa01;srulmsoa;

最好的办法是在 4 个不同的变量中用分号分隔值

令人惊奇的是有这样的输出:

connect sys/ytznnyg@arulmdbqtza01:1521/arulmrms as sysdba @coucou.sql
disconnect
connect system/ytznnyg@arulmdbqtza01:1521/arulmrms @coucou.sql
disconnect
connect sys/kylfpo8@arulmdbqtza02:1521/arulmrib as sysdba @coucou.sql
disconnect
connect system/kylfpo8@arulmdbqtza01:1521/arulmrib @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/arulmsoa as sysdba @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/arulmsoa @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/srulmsoa as sysdba @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/srulmsoa @coucou.sql
disconnect

答案1

bash是一个shell,一种解释命令行和运行命令的工具。您需要调用命令或其他命令来完成这项工作。这里用于xmlstarlet进行 XSLT 处理:

sed '1s|^|<x>|;$s|$|</x>|' < your-file.xml |
  xmlstarlet sel -t -v '//Value' |
  tr -d ' ' |
  paste -sd ';;;\n' -

上面是并行运行 4 个命令来执行作业的代码bash(实际上,它是 Bourne 或 POSIX shell 代码,因此它可以在所有类似 Bourne 的 shell 中解释,而不仅仅是)。bash其中,sedtrpaste是标准 POSIX 命令,因此可以在大多数 Unices 上找到。xmlstarlet你可能需要安装。

相关内容