I have a unix log file(application.log), that has logs with timestamp at the starting. I need to search for a pattern \"sent\" in this log file greater than time 2014-03-20
Try:
sed -n '/^2014-03-20 14:05:54/,$ {/sent/p;}' file
Note: This assumes that there is at least 1 line in your log file that actually starts with 2014-03-20 14:05:54
and that it's OK to include matches from that second in time.
If the existence of such a line is not guaranteed, @shellter's awk
approach is superior; to put it together:
awk '$0 > "2014-03-20 14:05:54" && $0 ~ "sent"' file
I added 2 more records to the test data to ensure this is really working:
2014-03-19 14:05:53,999 [NfxAgent....
2014-03-20 14:05:53,164 [NfxAgent....
But I don't think you can use grep
for this. Here is an awk solution:
$ grep sent grepTest_20140321.txt| awk '$0 > "2014-03-20 14:05:54"'
2014-03-20 14:05:54,038 [NfxAgent....
2014-03-20 14:05:54,164 [NfxAgent....
2014-03-20 14:05:54,298 [NfxAgent....
2014-03-20 14:05:54,414 [NfxAgent....
2014-03-20 14:05:54,787 [NfxAgent....
edit
"What if we need to specify the end time in the same format like 2014-03-21 10:04:14,018?"
And I've added 3 lines of test data to confirm the 2nd case:
2014-03-21 10:04:14,017 [NfxAgent....
2014-03-21 10:04:14,018 [NfxAgent....
2014-03-22 10:04:14,999 [NfxAgent....
Result shows one new record in the range you've specified.
awk '$0 ~ "sent" && $0 > "2014-03-20 14:05:54" && $0 < "2014-03-21 10:04:14,018"' grepTest_20140321.txt
2014-03-20 14:05:54,038 [NfxAgent....
2014-03-20 14:05:54,164 [NfxAgent....
2014-03-20 14:05:54,298 [NfxAgent....
2014-03-20 14:05:54,414 [NfxAgent....
2014-03-20 14:05:54,787 [NfxAgent....
2014-03-21 10:04:14,017 [NfxAgent....
IHTH