Não é tão estranho. sed
é um iter s tream ed , ele processa as linhas conforme elas aparecem. Um intervalo como /a/,/b/
significa que as linhas são selecionadas assim que a
for encontrado e não mais selecionadas após b
ser encontrado. Se b
nunca for encontrado, nunca parará de selecionar linhas.
Aqui, você deve usar awk
. Supondo que esses timestamps estão no início da linha:
awk '$0 >= "2016-09-29 01:" && $0 < "2016-09-29 01:30"'
Observe que ele selecionará apenas as linhas que têm um registro de data e hora no intervalo, excluindo, portanto, as linhas que não têm um registro de data e hora, mesmo se estiverem entre as linhas com registros de data e hora no intervalo.
Outra abordagem para contornar isso seria:
awk -v start='2016-09-29 01:' -v end='2016-09-29 01:30' '
$0 >= start && $0 <= end, /^[0-9]{4}([ :-][0-9]{2}){5}/ && $0 >= end'
Use um intervalo como em sed
, mas insira o intervalo na primeira linha entre as duas datas e deixe-o apenas quando encontrarmos uma linha com um registro de data e hora maior do que a data final. / p>