Let's say your log have the following structure:
219.369.42.449 - - [05/Mar/2020:11:05:17 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:11:06:37 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:01:14 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:07:23 +0200] "log line"
We can get all lines from the first occurrence of 05/Mar/2020:11 to the end $ of the file by using sed in the following way:
sed -n '/05\/Mar\/2020:11/,$p' "/path/to/file.log"
The option -n will suppress the normal output of sed, but the flag p will print the matched part of the file.
Note, if there isn't presented any record that mach to 05/Mar/2020:11, sed wont provide any output.
We can automate the above by the help of the commands date and eval:
COMMAND="sed -n '/$(LANG=C date --date='1 hour ago' "+%d\/%b\/%Y:%H")/,\$p'"
eval $COMMAND \"/path/to/file.log\"
- Using
sed with double quote marks and variable within the expression doesn't provide the desired output in this case.
- So we first constructing the command as string and convert it to a real command by
eval.
LANG=C (LANG=en_us_88591) stands in order to get the desired date format, because, for example, in my case the default value of this envvar is bg_BG.UTF-8.
You can create a script, based on the two lines above - examples of such script: