如何根据下一行特征从文件中查找特定字符串并提取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
相关产品推荐
相关产品推荐

