このjdbcファイル行があります
<url>jdbc:oracle:thin:@192.168.1.70:1521:MYDBORA</url>
その部分をキャプチャするには、一種のユーティリティを使用する必要がありますMYDBORA
が、必ずしも同じ名前ではありません。1521:
間の部分が必要です</url>
- 頑張りました
私は対価で何も得られませんでした*私も次のことを試しました。grep 1521 config_file.xml | sed 's/.*://' |grep -o -P '.0,6</url'
わかりました。grep 1521 config_file.xml | cut -d ':' -f 6
MYDBORA<url>
私はデータベースの名前だけが欲しい。常に5文字ではなく、間の1521:
すべてです。<url>
ファイル抽出:
<?xml version="1.0" encoding="UTF-8"?>
<jdbc-data-source xmlns="xmlns.oracle.com/weblogic/jdbc-data-source">
<name>assetmanagement-xa-ds</name>
<jdbc-driver-params>
<url>jdbc:oracle:thin:@192.168.1.70:1521:DB_NAME</url>
<driver-name>oracle.jdbc.xa.client.OracleXADataSource</driver-name>
<properties>
...
答え1
これはJDBCであり、XMLファイルを扱っているため、これを使用して、xmlstarlet
スペースやその他の無関係な形式に関係なく、必要な要素を確実に選択できます。
次の例を使用してください。JDBCドキュメント、選ぶ<connection-url/>
のはとても簡単です
xmlstarlet sel -t -v '//connection-url' -n config_file.xml
jdbc:oracle:thin:@%hostname%:%port%:%database sid%
<url/>
あなたの場合は、それに応じて交換する代わりに使用する必要があります<connection-url/>
。その後、最後のコロン(別々のフィールド)を選択できます。
xmlstarlet sel -t -v '//url' -n config_file.xml | awk -F: '{print $NF}'
MYDBORA
答え2
専用パーサーの使用常に安全で強力なオプションですが、データが表示されるよりも可変でない限り、他の可能な解決策は次のとおりです。
$ grep -oP '<url>.*:\K[^<]+' file
MYDBORA
答え3
Raku(以前のPerl_6)の使用:
jdbc-data-source.xmlファイルで始まるhttps://stackoverflow.com/a/39994984/7270649、XML
Rakuモジュールを使用してください。
~$ raku -MXML -e 'my $xml=from-xml-file($*ARGFILES.Str); put $xml.elements(:TAG<url>, :RECURSE(Inf), :SINGLE);' jdbc-data-source.xml
<url>jdbc:oracle:thin:@host:port:db</url>
これにより、以下を使用して個々のデータ要素を抽出するのが十分簡単です.contents.split(":")
。
~$ raku -MXML -e 'my $xml=from-xml-file($*ARGFILES.Str); put $xml.elements(:TAG<url>, :RECURSE(Inf), :SINGLE).contents.split(":");' jdbc-data-source.xml
jdbc oracle thin @host port db
最後に、たとえば、数値インデックスをdb
使用してインデックスに最後の要素を取得します。 Rakuの1行をまとめると、次のようになります。.tail
.[*-1]
~$ raku -MXML -e 'my $xml=from-xml-file($*ARGFILES.Str); put $xml.elements(:TAG<url>, :RECURSE(Inf), :SINGLE).contents.split(":").tail;' jdbc-data-source.xml
db