awk
é provavelmente tudo o que você precisa aqui, pois pode fazer correspondência de expressões regulares, dividir linhas em campos e fazer comparações de strings (o que funciona para comparação de datas, desde que você use carimbos de data e hora YYYY-MM-DD HH: MM: SS e não há mudança de horário de verão).
Se a data estiver no primeiro campo e a hora no segundo:
awk -v date=1 -v time=2 '
$date > "2018-05-24" && $time < "12:00:00" && /some text/'
A implementação GNU awk de awk
possui extensões de formatação e análise de data que permitem fazer coisas mais avançadas, como:
gawk -v date=1 -v time=2 '
function parse_time(t) {
gsub(/[:-]/, " ", t)
return mktime(t)
}
BEGIN {
start = parse_time("2018-01-01 08:00")
end = systime() - 86400 # yesterday, same time
}
{t = parse_time($date" "$time)}
t >= start && t <= end && /some test/'