![XMLファイルから値を取得する - 要件:bash / Unixで実行する必要がある[閉じる]](https://linux33.com/image/32561/XML%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%20-%20%E8%A6%81%E4%BB%B6%EF%BC%9Abash%20%2F%20Unix%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
以下は私の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
コマンドラインを解釈してコマンドを実行するツールであるシェル。操作を実行するには、コマンドまたは何かを呼び出す必要があります。これはxmlstarlet
XSLT処理に使用されます。
sed '1s|^|<x>|;$s|$|</x>|' < your-file.xml |
xmlstarlet sel -t -v '//Value' |
tr -d ' ' |
paste -sd ';;;\n' -
上記は4つのコマンドを並列に実行してタスクを実行するコードですbash
(実際にはBourneまたはPOSIXシェルコードなので、Bourneなどのシェルだけでなく、すべてのBourne様シェルで解釈可能です)。その中bash
で、およびは標準のPOSIXコマンドなので、ほとんどのUnicesで見つけることができます。インストールする必要があります。sed
tr
paste
xmlstarlet