Você pode usar grep -B2 -E '^[0-9]{5} +[a-zA-Z]+$' para tentar encontrar apenas blocos de endereços.
Algumas notas:
- veja
man greppara 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).