文字列2、3、または4が存在する場合にのみ、文字列1を置き換えます。

文字列2、3、または4が存在する場合にのみ、文字列1を置き換えます。

基本的に私はOracle DBAです。プライマリデータベースからスタンバイデータベースに切り替える作業があり、tns接続エントリを含むファイルでtnsエントリ(ホスト名)をtnsからtnsにsape-scan変更する必要があります。sapi-scantnsnames.oraSAP_PRODGOLD_PRODEVENTS_SAP

例:

SAP_PROD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = sape-scan.walmart.net)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SAP)
    )
  )

tnsエントリがSAP_PRODであることを確認したら、sape-scanをsapi-scanに変更する必要があります。

ベストアンサー1

別のオプションはsedを使用することです。

sed -re '/^(SAP_PROD|GOLD_PROD|EVENTS_SAP) =/,/^$/s/HOST = sape-scan/HOST = sapi-scan/' tnsnames.ora
  • 正規表現置換の-rために拡張正規表現()を開く|
  • 次の引数(引用符付きテキスト)を評価する式として扱います(-e)。
  • 行の先頭に「SAP_PROD」、「GOLD_PROD」、または「EVENTS_SAP」で囲まれた行の間に空行が表示されるまで、スペースと等号が続きます。
  • 「HOST = sape-scan」テキストを検索して「HOST = sapi-scan」テキストに置き換えます。
  • tnsnames.ora ファイルから

上記のバージョンでは、以下を使用して変更を非破壊的にテストできます。

sed ... tnsnames.ora > tnsnames.new
diff tnsnames.ora tnsnames.new

…そして何が変わったのか見てください。多くの sed 実装では、-iフラグを追加することで「所定の位置」を変更できます。

おすすめ記事