Delete lines from file based on condition

I want to keep last 2 days data from a file and want to delete others data from the file. Please help me.

Sample Input

[root@test1 log]# cat messages-2
Apr 15 11:25:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 15 11:25:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start
Apr 16 19:42:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 16 19:42:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start
Apr 17 15:34:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 17 15:34:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start
Apr 18 18:41:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.123456
Apr 18 18:41:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start1234567890987654321
Apr 19 17:11:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 19 17:11:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start1234567890987654321234567890987654321234567890
Apr 20 15:11:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 20 15:11:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start

Sample Output

[root@test1 log]# cat messages-2
Apr 19 17:11:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 19 17:11:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start1234567890987654321234567890987654321234567890
Apr 20 15:11:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started.
Apr 20 15:11:03 test1 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1092" x-info="http://www.rsyslog.com"] (re)start
awk -v d="$(date -d '1 days ago' '+%h %d')" 'NR == FNR {if($0 !~ "^"d) {next}; n = (n == "") ? FNR : n; next} FNR >= n' messages-2 messages-2 > messages-2.tmp && mv messages-2.tmp messages-2

This mini-script with grep works for me.

numdays=1
while [ $numdays -lt 2 ];do
  mydate=$(date -d"${numdays} days ago" "+%h %d")
  grep -i ^"${mydate}" message
  let numdays++
done

[edit]

Just redirect the output to another file.

myscript.sh > messages_last2days