Если в таком формате и начиная с произвольной даты до другой произвольной даты - то вот набросок:
#!/bin/sh
startdate=2010-09-09
enddate=2010-12-31
service=kernel
log=./mylog
mydate=$startdate
enddate=`date --date "$enddate 1day" +%Y-%m-%d` # add 1 day (inclusive)
while [ "$mydate" != "$enddate" ]; do
grep "$mydate $service" < $log
mydate=`date --date "$mydate 1day" +%Y-%m-%d` # add 1 day
done
Если точно известно (можно проверять с помощью grep -q), что начальная и конечная даты есть в журнале, и что даты идут по порядку, то можно проще:
cat $log | sed -ne "/^$startdate/,/^$enddate/p" | grep "^[0-9 -]*$service"
PS Впрочем в последнем варианте, только первая строка с $enddate попадет на вход grep. Если же увеличить день на единицу, то надо как-то отработать вариант, что может попасть одна лишняя строка из следующего дня.