Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用sed进行Unix搜索和替换_Bash_Shell_Sed - Fatal编程技术网

Bash 使用sed进行Unix搜索和替换

Bash 使用sed进行Unix搜索和替换,bash,shell,sed,Bash,Shell,Sed,我有一个防火墙日志,它的时间戳格式为date+%d/%B/%Y $ date +%d/%B/%Y 21/May/2018 日志行(输入): 我知道如何每天使用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/

我有一个防火墙日志,它的时间戳格式为
date+%d/%B/%Y

$ date +%d/%B/%Y

21/May/2018
日志行(输入):

我知道如何每天使用
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 
如何使用(2018年5月21日)
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

像这样的东西应该有用:

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

您可以添加
-i
标志来覆盖日志,例如,
sed-i…

如果您也可以在文章中使用代码标记发布输入和预期输出的示例,那就更好了。您为什么要更改日志:)
sed 's!'$(date -d '-1 day' '+%d/%B/%Y')'!'$(date +%d/%B/%Y)'!g' firewall.log