Não posso sugerir uma expressão grep
, porque não é para isso que o grep
é válido.
Eu sugeriria usar perl
e um operador de intervalo:
#!/usr/bin/env perl
use strict;
use warnings;
while ( <> ) {
print if m/Wed Nov 25 23:08:01 GMT 2015/ .. /Wed Nov 25 23:59:24 GMT 2015/;
}
Que se for formatado como um forro único:
perl -ne 'print if m/Wed Nov 25 23:08:01 GMT 2015/ .. /Wed Nov 25 23:59:24 GMT 2015/'
Nota - faz correspondência baseada em texto, não numérica (como no regex). Seria possível converter essas datas e usar a hora com base.
Você poderia fazer numericamente assim:
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $start = Time::Piece->strptime( 'Nov 25 23:00:00 GMT 2015',
'%b %d %H:%M:%S GMT %Y' );
my $end = Time::Piece->strptime( 'Nov 25 23:59:00 GMT 2015',
'%b %d %H:%M:%S GMT %Y' );
my $last_timestamp;
while ( my $line = <DATA> ) {
chomp($line);
my $timestamp =
eval { Time::Piece->strptime( $line, '%a %b %d %H:%M:%S GMT %Y' ) };
$timestamp //= $last_timestamp;
if ( $timestamp > $start and $timestamp < $end ) {
print $line,"\n";
}
$last_timestamp = $timestamp;
}
__DATA__
[...]
abc
abc
abc
Wed Nov 25 23:08:01 GMT 2015
def
def
def
def
... (1000 lines with def)
Wed Nov 25 23:59:24 GMT 2015
xyz
xyz
xyz
[...]
(Nota - as datas não correspondem à sua entrada em sentido literal - estamos analisando-as em valores numéricos e verificando dentro do intervalo).