Filtrar nombres del archivo de texto

Filtrar nombres del archivo de texto

Tengo un archivo donde hay nombres en la posición del primer carácter. Estoy tratando de encontrar una manera de recuperar todos los nombres. Ejemplo aquí: quisiera que figuraran los nombres BUBBA y SUSAN.

BUBBA =

 (DESCRIPTION =
 (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = bubba01)(PORT = xxxx))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = bubba01)
  )
 )

SUSAN =

 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = susan01)(PORT = xxxx))
   )
   (CONNECT_DATA =
     (SID = susandb)
   )
  )

Respuesta1

Parece que solo quieres:

grep -o '^[A-Z]\+'

-osignifica que solo genera la parte coincidente de la línea, y la expresión regular coincide con una secuencia de una o más letras mayúsculas al comienzo de una línea.

También puedes hacer este tipo de cosas con sed, que es demasiado complicado para este ejemplo pero útil (y más simple que awko perl) si necesitas hacer coincidencias o transformaciones más complejas:

sed -n '/^[A-Z]\+/{s/^\([A-Z]\+\).*/\1/;p}'

Respuesta2

Usando awk:

awk 'NF > 1 && $1 !~ /^\(|\)/ {print $1}' file

Imprima únicamente líneas con al menos un campo ( NF > 1) e ignore las líneas que comiencen con (o ): ^\(|\).

Respuesta3

Si todos los archivos de entrada tienen el mismo formato, entonces para una solución awk simple:

awk '/^[a-Z]/ {print $1}' filename

El uso del carrat ( ^) seleccionará solo las entradas que tengan un carácter al principio de cada línea. Luego imprima solo el primer campo ignorando el archivo =.

información relacionada