Filtrar nomes do arquivo de texto

0

Eu tenho um arquivo onde há nomes na primeira posição de caractere. Eu estou tentando encontrar uma maneira de grep 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)
   )
  )
    
por Vik 06.10.2014 / 21:10

3 respostas

2

Parece que você quer apenas:

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

-o significa apenas a saída da parte correspondente da linha, e a expressão regular 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 é supercomplicado para este exemplo, mas útil (e mais simples que awk ou perl ) se precisar fazer uma correspondência ou transformação mais complexa:

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

    
por 06.10.2014 / 21:14
1

Usando awk :

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

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

    
por 06.10.2014 / 22:28
0

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

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

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

    
por 07.10.2014 / 17:45