awk to find pattern and add lines

My file goes like this:

SID_LIST_HOSTNAME_LISTENER_3 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORA0008)
      (ORACLE_HOME = /opt/oracle/product/ORA0008)
      (ENVS = "LD_LIBRARY_PATH=/opt/oracle/product/ORA0008/lib")
    )
    (SID_DESC =
      (SID_NAME = ORA0007)
      (ORACLE_HOME = /opt/oracle/product/ORA0007)
      (ENVS = "LD_LIBRARY_PATH=/opt/oracle/product/DBATST1/lib")
    )
    (SID_DESC =
      (SID_NAME = ORA0006)
      (ORACLE_HOME = /opt/oracle/product/ORA0006)
      (ENVS = "LD_LIBRARY_PATH=/opt/oracle/product/10.2.0.4.EE.2009Q2a/lib")
    )
..
..

I want use awk to add:

(SID_DESC =
      (SID_NAME = <SID>)
      (ORACLE_HOME = /opt/oracle/product/<SID>)
      (ENVS = "LD_LIBRARY_PATH=/opt/oracle/product/10.2.0.4.EE.2009Q2a/lib")
    )
 

immediately after:

SID_LIST_HOSTNAME_LISTENER_3 =
  (SID_LIST =

in my input file.

Can someone help me figure out a way to match 2 patterns and then add the lines..

TIA

Gotta be awk? I can do it in sed:

sed '
  s/regex_pattern.*/&\
add_line_1\
add_line_2\
add_line_3/
 ' infile >outfile

This won't match pattern on 2 lines but on 1 line, i.e. if I use:

 
sed 's/^SID_LIST_.*=$/& \
   (SID_LIST =\
    (SID_DESC =\
      (SID_NAME = <ORACLE_SID>)\
      (ORACLE_HOME = \/opt\/oracle\/product\/<ORACLE_SID>)\
      )/'

The output shall be:

SID_LIST_HOSTNAME_LISTENER_3 =
(SID_LIST =
(SID_DESC =
(SID_NAME = <ORACLE_SID>)
(ORACLE_HOME = /opt/oracle/product/<ORACLE_SID>)
)
(SID_LIST =
(SID_DESC =
(SID_NAME = ORA0008)
(ORACLE_HOME = /opt/oracle/product/ORA0008)
(ENVS = "LD_LIBRARY_PATH=/opt/oracle/product/ORA0008/lib")
)
(SID_DESC =
(SID_NAME = ORA0007)
...
...
etc.
 

Whereas I need:

SID_LIST_HOSTNAME_LISTENER_3 =
(SID_LIST =
(SID_DESC =
(SID_NAME = <ORACLE_SID>)
(ORACLE_HOME = /opt/oracle/product/<ORACLE_SID>)
)
(SID_DESC =
(SID_NAME = ORA0008)
(ORACLE_HOME = /opt/oracle/product/ORA0008)
(ENVS = "LD_LIBRARY_PATH=/opt/oracle/product/ORA0008/lib")
)
(SID_DESC =
(SID_NAME = ORA0007)
...
...
 

Any clues?

---------- Post updated at 08:23 PM ---------- Previous update was at 08:03 PM ----------

Thi works:

 
sed '/^SID_LIST_.*=$/,/(SID_LIST =$/ s/(SID_LIST =$/& \
    (SID_DESC =\
      (SID_NAME = <ORACLE_SID>)\
      (ORACLE_HOME = \/opt\/oracle\/product\/<ORACLE_SID>)\
      )/'  
 
awk -v a1="$a" '/SID_LIST_HOSTNAME_LISTENER_3/ {print;c=NR;next} NR==c-1&&/\(SID_LIST/ {print;print a1;c=0;next}1' input_file

Where does "a" holds the needed replacement string.

In sed, you can N when yoou see a promising first line to add the second line (or you can N your way for all lines 2-$ with two lines in the buffer) and then compare across the linefeed. In your case, I would pull all the "(SID_DESC =" through ")" lines into the buffer and then rework the buffer.

sed '
  /(SID_DESC =/{
    :loop
    N
    /\n *) *$/!b loop
    -- rework buffer substitutions --
   }
 '