views:

420

answers:

1

Hi

I have tnsnames.ora file like

DB_CONNECTION1=
   (description=
     (address=
         (protocol=tcp)
         (host=myhost1.mydomain.com)
         (port=1234)
      )
      (connect_data=
         (sid=ABCD)
         (sdu=4321)
  )
DB_CONNECTION2=
   (description=
     (address=
         (protocol=tcp)
         (host=myhost2.mydomain.com)
         (port=1234)
      )
      (connect_data=
         (sid=ABCD)
         (sdu=4321)
  )

What regular expression do i need to use to extract the value myhost from the key host.

Ouput should be 
myhost1
myhost2
+1  A: 

As grep prints the whole line, you could do it in steps like:

grep "(host=" tnsnames.ora | cut -f 2 -d '=' | cut -f 1 -d '.'

To break it down:

  1. grep "(host=" tnsnames.ora -- finds all lines with the entry "(host="
  2. cut -f 2 -d '=' -- finds what is in column number 2 if you divide by the '=' character
  3. cut -f 1 -d '.' -- finds what is in column number 1 if you divide by the '.' character


You can execute the chain of commands to any point, to see the intermediate result, like:

grep "(host=" tnsnames.ora | cut -f 2 -d '='

Would give you:

myhost1.mydomain.com)
myhost2.mydomain.com)

That way it's easy to build your set of commands to do this type of thing.

crunchdog
Excellent thanks a miilion you showed me how to break a problem into pieces and solve it
Edwards