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: