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インストールです。

おすすめ記事