Shell 使用脚本修改侦听器文件

Shell 使用脚本修改侦听器文件,shell,awk,sed,Shell,Awk,Sed,下面是我的侦听器条目 SID\u LIST\u DG\u LISTENER= (SID\u列表= (SID_DESC= (GLOBAL\u DBNAME=abc) (ORACLE\u HOME=abc) (SID_NAME=abc) (服务名称=abc) ) ) 我需要一个可以添加新SID DESC块的shell命令 SID\u LIST\u DG\u LISTENER= (SID\u列表= (SID_DESC= (GLOBAL\u DBNAME=abc) (ORACLE\u HOME=abc)

下面是我的侦听器条目

SID\u LIST\u DG\u LISTENER=

(SID\u列表=

(SID_DESC=

(GLOBAL\u DBNAME=abc)

(ORACLE\u HOME=abc)

(SID_NAME=abc)

(服务名称=abc)



我需要一个可以添加新SID DESC块的shell命令

SID\u LIST\u DG\u LISTENER=

(SID\u列表=

(SID_DESC=

(GLOBAL\u DBNAME=abc)

(ORACLE\u HOME=abc)

(SID_NAME=abc)

(服务名称=abc)

(SID_DESC=

(全局_DBNAME=xyz)

(ORACLE\u HOME=xyz)

(SID_NAME=xyz)

(服务名称=xyz)



如果您可以假设最后两个右括号在同一行中是单独的,那么以下操作应该有效:

awk '!/^)$/ {print}' <desc_file >new_desc_file
cat new_desc >> new_desc_file
printf ")\n)" >> new_desc_file
mv new_desc_file desc_file
awk'!/^)$/{print}新的描述文件
cat新描述>>新描述文件
printf“\n)”>>新的描述文件
mv新描述文件描述文件

可以使用sed来完成,但是命令有点神秘(sed的情况经常如此):


此命令适用于两种情况(同一行或不同行上的最后两个括号)。根据您的sed和OS版本,您可以就地编辑该文件。

cat new_desc_file>>desc_file
我无法直接附加,因为我需要在SID_列表块下添加新的SID_desc块。请检查您的示例-它可能不正确;错过了第一个描述的结束。非常感谢。如果你不介意的话,这两种情况都可以,比如最后两个结束括号在同一行上,或者可以在不同的行上。我想的是,提取最后第二个括号,然后添加新块,最后添加一个结束括号。好吧,你可以尝试一个,多行正则表达式使其更加健壮。
SID=xyz
sed '3{N;N;N;N;h;};${s/)$//;p;g;s/abc/'$SID'/g;s/))$/)/;s/)$/))/;}' oldfile > newfile