使用sed进行Unix搜索和替换

时间:2018-05-21 11:33:03

标签: bash shell sed

我有一个防火墙日志,其时间戳的格式为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

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

sed 's!'$(date -d '-1 day' '+%d/%B/%Y')'!'$(date +%d/%B/%Y)'!g' firewall.log

您可以添加-i标记来覆盖日志,e.i。,sed -i ...