構成ファイルの1行からデータベース名を選択してください。

構成ファイルの1行からデータベース名を選択してください。

この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/7270649XMLRakuモジュールを使用してください。

~$ 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

https://raku.org/

関連情報