구성 파일의 한 줄에서 데이터베이스 이름을 선택하세요.

구성 파일의 한 줄에서 데이터베이스 이름을 선택하세요.

이 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, XMLRaku 모듈을 사용하십시오.

~$ 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의 한 줄을 요약하면 다음과 같습니다..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/

관련 정보