grep
é explicitamente definido para ignorar novas linhas, então você não pode realmente Use isso. sed
sabe internamente se a linha atual (fragmento) termina em uma nova linha ou não, mas não consigo ver como ela pode ser coagida para revelar essa informação. awk
separa os registros por novas linhas ( RS
), mas realmente não se importa se havia um, a ação padrão de print
é imprimir uma nova linha ( ORS
) no final em qualquer caso.
Portanto, as ferramentas usuais não parecem muito úteis aqui.
No entanto, sed
sabe quando está trabalhando na última linha, por isso, se você não se importar em perder a última linha intacta nos casos em que uma parcial não é vista, você pode ter apenas sed
delete pensa que é o último. Por exemplo,
sed -n -e '$d' -e '/pattern/p' < somefile # or
< somefile sed '$d' | grep ...
Se isso não for uma opção, então sempre haverá Perl. Isso deve imprimir apenas as linhas que correspondem a /pattern/
e ter uma nova linha no final:
perl -ne 'print if /pattern/ && /\n$/'