Unix поиск и замена с помощью sed - PullRequest
0 голосов
/ 21 мая 2018

У меня есть журнал брандмауэра, который имеет отметку времени в формате 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 +%d/%B/%Y
21/May/2018

Я также понял, как получить предыдущую дату

$ date -d '-1 day' '+%d/%B/%Y'
20/May/2018 

Как сопоставить дату предыдущего дня из журнала и заменить ее на отметку даты последнего дня, используя (21 / май / 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 голосов
/ 21 мая 2018

Примерно так, должно работать:

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

, и вы можете добавить флаг -i для перезаписи логов, например, sed -i ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...