我有一个防火墙日志,其时间戳的格式为date +%d/%B/%Y
。
$ date +%d/%B/%Y
21/May/2018
日志行(输入):
#cat firewall.log
1.5.5.1 - - [20/May/2018:00:00:00 +0000] "GET blah.com HTTP/1.1" 304 0 304 0 0 0 299 262 293 227 0
我了解如何每天使用sed
更改时间格式。
sed "s/\[20\/May\/2018/\[21\/May\/2018/g" firewall.log
我想定期使用unix date module
更改为最新的时间戳$date +%d/%B/%Y
21/May/2018
我也得到了如何获得上一个日期
$ date -d '-1 day' '+%d/%B/%Y'
20/May/2018
如何从日志中匹配前一天的日期,并使用(21 / May / 2018)sed
替换最新日期的日期戳?
预期产出:
$sed "s/previous_day_match/latest_day_match/g" firewall.log
1.5.5.1 - - [21/May/2018:00:00:00 +0000] "GET blah.com HTTP/1.1" 304 0 304 0 0 0 299 262 293 227 0
答案 0 :(得分:1)
这样的事情应该有效:
sed 's!'$(date -d '-1 day' '+%d/%B/%Y')'!'$(date +%d/%B/%Y)'!g' firewall.log
您可以添加-i
标记来覆盖日志,e.i。,sed -i ...