使用脚本修改侦听器文件

时间:2016-10-19 16:34:57

标签: shell awk sed

以下是我的听众条目

SID_LIST_DG_LISTENER =
        (SID_LIST =
          (SID_DESC =
          (GLOBAL_DBNAME = abc)
          (ORACLE_HOME = abc)
           (SID_NAME = abc)
           (SERVICE_NAME = abc)
        )
        )
我想要一个可以添加新SID DESC块的shell命令。例如

SID_LIST_DG_LISTENER =
  (SID_LIST =
 (SID_DESC =
        (GLOBAL_DBNAME = abc)
        (ORACLE_HOME = abc)
        (SID_NAME = abc)
        (SERVICE_NAME = abc)

(SID_DESC =
        (GLOBAL_DBNAME = xyz)
        (ORACLE_HOME = xyz)
        (SID_NAME = xyz)
        (SERVICE_NAME = xyz)
       )
       )

2 个答案:

答案 0 :(得分:0)

如果您可以假设最后两个右括号在行中是唯一的,则以下内容应该有效:

awk '!/^)$/ {print}' <desc_file >new_desc_file
cat new_desc >> new_desc_file
printf ")\n)" >> new_desc_file
mv new_desc_file desc_file

答案 1 :(得分:0)

可以使用sed完成,但命令有些神秘(就像sed一样):

SID=xyz
sed '3{N;N;N;N;h;};${s/)$//;p;g;s/abc/'$SID'/g;s/))$/)/;s/)$/))/;}' oldfile > newfile

此命令适用于两种情况(同一行或不同行上的两个最后括号)。您可以根据您的sed和操作系统版本来编辑文件。