You need to enable JavaScript to run this app. 如何根据下一行特征从文件中查找特定字符串并提取Listnername
优惠活动
大模型
产品
解决方案
定价
更多

如何根据下一行特征从文件中查找特定字符串并提取Listnername

从Oracle监听配置文件提取监听器名称的方法

需求背景

需要从符合如下格式的Oracle监听配置中,提取监听器名称(即配置项的键名,特征为该配置项行以=结尾,下一行以(DESCRIPTION_LIST开头):

SID_LIST_DB_NAME =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = DB_NAME)
      (ORACLE_HOME = /opt/oracle12.2.0/app)
    )
  )

Listnername =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = abc.tdk.dk)(PORT = 1000))
    )
  )

实现命令

方法1:grep+awk组合(逻辑直观,适合新手)

直接匹配(DESCRIPTION_LIST的前一行,清洗后输出结果:

grep -B1 '(DESCRIPTION_LIST' 你的配置文件路径 | awk 'NR==1 {gsub(/[ =]/,""); print}'

命令说明:

  • grep -B1 '(DESCRIPTION_LIST':找到所有包含(DESCRIPTION_LIST的行,同时输出对应行的前1行内容
  • awk处理部分:取输出的第一行,删除所有空格和等号,剩余内容就是监听器名称
  • 若配置中存在多个监听器,该命令会批量输出所有符合条件的监听器名称

方法2:单awk实现(效率更高,适合大文件场景)

awk '/\(DESCRIPTION_LIST/ {print prev} {prev=$0}' 你的配置文件路径 | sed 's/ *= *//g'

命令说明:

  • 遍历文件每一行,将当前行内容存入prev变量
  • 当匹配到(DESCRIPTION_LIST行时,输出上一行存储的prev内容,再通过sed删除等号和前后空格即可得到结果

输出示例

针对你提供的示例配置文件,上述命令执行后输出结果为:

Listnername

内容的提问来源于stack exchange,提问作者Divya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 11:54:08