tnsnames.ora 파일에서 서비스 이름과 포트 번호만 추출합니다.

tnsnames.ora 파일에서 서비스 이름과 포트 번호만 추출합니다.

하나 주고 싶다서비스 이름, 반환된 포트 번호를 가져옵니다.

내 tnsnames.ora 파일은 다음과 같습니다.

DELUCA =
  (DESCRIPTION =
    (ADDRESS = (COMMUNITY = TCP.world)(PROTOCOL = TCP)(Host = database.example.com.au)(Port = 32001))
    (CONNECT_DATA =
      (SID = D10)
    )
  )

TOTAL =
  (DESCRIPTION =
    (ADDRESS = (COMMUNITY = TCP.world)(PROTOCOL = TCP)(Host = database.example.com.au)(Port = 32002))
    (CONNECT_DATA =
      (SID = D11)
    )
  )
FMAX =
  (DESCRIPTION =
    (ADDRESS = (COMMUNITY = TCP.world)(PROTOCOL = TCP)(Host = database.example.com.au)(Port = 32003))
    (CONNECT_DATA =
      (SID = D12)
    )
  )

답변1

공식적인 설명을 본 적이 없으므로 tnsnames.ora형식을 추측하고 있습니다. 원하는 것을 수행하는 스크립트에 대한 나의 시도는 다음과 같습니다.

#!/bin/bash
HOST=$1
tr '()' '\n\n' < input |
awk 'BEGIN {host=""; port=""}
    /[Hh][Oo][Ss][Tt]/ {host=$3}
    /[Pp][Oo][Rr][Tt]/ {port=$3}
    host && port {
        if (host == "'$HOST'") {print host, port}
        host=""; port=""
    }
'

awk이것은 GNU의 최근 Arch Linux 설치입니다.

답변2

모든 일치 항목을 나열하려면 grepPCRE(예: GNU )를 지원하는 버전을 사용하세요 .grep

hostname="database.example.com.au"
< inputfile grep -Po "$hostname\)\(Port = \K[0-9]+"

첫 번째 일치 항목만 나열합니다.

hostname="database.example.com.au"
< inputfile grep -Po -m1 "$hostname\)\(Port = \K[0-9]+"

sed모든 일치 항목을 나열하려면 ,를 사용하십시오 .

< inputfile sed -n "s/.*$hostname)(Port = \([0-9][0-9]*\).*/\1/p"

첫 번째 일치 항목만 나열합니다.

< inputfile sed -n "0,/$hostname/{s/.*$hostname)(Port = \([0-9][0-9]*\).*/\1/p}"

관련 정보