Isso é tudo que você precisa:
five_min=$( date -d "5 minutes ago" +"%F %T" )
while IFS= read -r line; do
[[ "$five_min" < "$line" ]] && echo "$line"
done < output.log
Então, é um arquivo enorme. Em seguida, use tac para gerar o arquivo pela primeira vez:
five_min=$( date -d "5 minutes ago" +"%F %T" )
tac output.log | while IFS= read -r line; do
[[ "$five_min" < "$line" ]] && echo "$line"
done | tac
O comando while , assim como outras linguagens, executa seu corpo enquanto a condição é verdadeira. Em shells POSIX, a "condição" dos comandos if e while é em si um comando. A "verdade" da "condição" é que o comando sai com um status de saída zero. É muito importante perceber que as palavras [ e [[ são realmente comandos, não apenas sintaxe (de um tipo de shell bash help [[ e help [ )
Nessa resposta, a condição é IFS= read -r line , que é a maneira canônica de ler uma linha de um arquivo e manter intactas todas as sequências de espaço em branco e de barra invertida. read retornará com um status de saída diferente de zero se não houver mais nada para ler em seu fluxo de entrada. Na minha primeira resposta, redirecionei o conteúdo do arquivo de log para a entrada padrão do comando while e read lerá esses dados.