Filtrar nomes do arquivo de texto

Filtrar nomes do arquivo de texto

Eu tenho um arquivo onde há nomes na posição do primeiro caractere. Estou tentando encontrar uma maneira de agrupar todos os nomes. Exemplo aqui eu gostaria que os nomes BUBBA e SUSAN fossem listados.

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

Responder1

Parece que você só quer:

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

-osignifica apenas gerar a parte correspondente da linha, e o regex corresponde a uma sequência de uma ou mais letras maiúsculas no início de uma linha.

Você também pode fazer esse tipo de coisa com sed, que é muito complicado para este exemplo, mas útil (e mais simples que awkou perl) se você precisar fazer correspondências ou transformações mais complexas:

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

Responder2

Usando awk:

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

Imprima apenas linhas com pelo menos um campo ( NF > 1) e ignore as linhas que começam com (ou ): ^\(|\).

Responder3

Se todos os arquivos de entrada estiverem formatados da mesma forma, para uma solução simples do awk:

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

Usar o carrat ( ^) selecionará apenas as entradas que possuem um caractere no início de cada linha. Em seguida, imprima apenas o primeiro campo ignorando o =.

informação relacionada