O Awk está presente em todos os unix (é o padrão ). Qualquer coisa que o grep ou sed possa fazer, pode ser codificado no awk (mas nem sempre é simples).
Awk opera registro por registro. O separador de registro padrão é uma nova linha (ou seja, por padrão, um registro é uma linha), mas se o A variável RS
está definida para um valor vazio e, em seguida, o separador de registro é uma ou mais linhas vazias (ou seja, um registro é um parágrafo).
awk -v RS= '/needle/'