Pregunta

Tengo un archivo tnsnames.ora como

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)
  )

¿Qué expresión regular necesito usar para extraer el valor myhost del host clave?

Ouput should be 
myhost1
myhost2
¿Fue útil?

Solución

A medida que grep imprime toda la línea, puede hacerlo en pasos como:

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

Para desglosarlo:

  1. grep " (host = " tnsnames.ora - encuentra todas las líneas con la entrada " (host = "
  2. cut -f 2 -d '=' - encuentra lo que está en la columna número 2 si divide por el carácter '='
  3. cortar -f 1 -d '.' - encuentra lo que está en la columna número 1 si divide entre '.' personaje

Puede ejecutar la cadena de comandos en cualquier punto, para ver el resultado intermedio, como:

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

Te daría:

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

De esa manera, es fácil construir su conjunto de comandos para hacer este tipo de cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top