Você pode fazer isso com:% tr "~" "\n" < edi_file | tail -20 | grep ^SE
O tr tr aproxima todos os tildes a novas linhas. (Esses são representados por um \ n).
A saída é então alimentada para a cauda, que descarta todas as últimas 20 linhas.
Você provavelmente pode ajustar isso, dependendo do que deseja pesquisar. Sem ele, todo o arquivo é alimentado para o grep, o que provavelmente requer muito mais recursos do que a cauda. Se você tem uma versão específica da cauda que suporta a exibição de parte de um arquivo com base em bytes, em vez de linhas, você pode até usar esse passo mais cedo.
Eu não escolhi essa opção porque sua postagem é marcada como genérica unix ao invés de linux moderno com ferramentas GNU atualizadas e extensões específicas do GNU .
Finalmente, grep
filtra as linhas finais para aquelas que contêm SE, e o carret ( ^
) certifica-se de que está no início em uma linha. (Evitar coisas como ~ foooo SE foobarquz ~ SE foram parte disso ~ boobar ~ para mostrar duas linhas).