
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]\+'
-o
significa 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 awk
o 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 =
.