Você pode usar grep -B2 -E '^[0-9]{5} +[a-zA-Z]+$'
para tentar encontrar apenas blocos de endereços.
Algumas notas:
- veja
man grep
para entender as opções - veja o final da manpage do grep para encontrar uma manpage que explique a sintaxe da regex em detalhes, a própria página do GNU grep também explica o regex um pouco
-
-B
é "linhas antes do jogo" e pode ser mais adequado para você do que-C
-
-E
é para sintaxe de regex estendida - o regex que eu dei corresponde a qualquer linha que tenha cinco dígitos (
{5}
leva a coisa anterior cinco vezes), então pelo menos um espaço (+
leva a coisa anterior uma ou mais vezes) e somente cartas até o fim da linha. - tome cuidado ao citar seus argumentos para o grep.
'
é muito diferente de'
ou"
.
Você pode tentar encontrar linhas contendo apenas duas palavras se tentar encontrar linhas que contenham apenas um espaço:
grep -E '^[^ ]+ [^ ]+'
Se você quiser combinar algo em várias linhas, não tenho certeza se grep
pode fazer isso. Você poderia tentar fazer isso com sed
, que pode carregar as próximas linhas no espaço de padrão com N
e então combinar com essa concatenação (dê uma olhada em man sed
se isso puder ser adequado para você). (Ou perl
, acho que pode corresponder a padrões de várias linhas, mas não sei como).