首页 > 解决方案 > 在 shell 脚本中,如何进入文件并用迭代时间戳替换字符串的每个实例

问题描述

我需要进入一个包含数千个包含每个格式字符串的日志条目的目录:

timestamp: REPLACE_ME

并用大约 5 分钟增量的不同迭代日期时间替换它的每个实例。

IE:

first instance of "REPLACE_ME" -> March,1,2020: 00:00:05 
second instance of "REPLACE_ME" -> March,1,2020: 00:00:10
...
...
...
nth instance of "REPLACE_ME" -> March,1,2020 23:55:55

然后“循环”

n+1th instance of "REPLACE_ME" -> March,1,2020, 00:00:00

我尝试了类似的东西

sed -i "0,/${REPLACETEXT}/ s/${REPLACETEXT}/${DATE_VAR}/" ${FILE}

在一个循环中,但这是非常低效的(处理一个文件几 MB 的分钟),这是不可接受的。

我这样做的目的是我试图生成带有增量时间戳的“假日志”,其中每个事件都以 5 分钟的间隔发生。不幸的是,我使用的 Json Log 生成器解决方案(log-synth)不支持增量时间戳。所以我试图弄清楚如何在 Bash 中做到这一点。

标签: bashlogging

解决方案


您可以使用该date命令来增加日期时间并以您预期的格式返回一个值:

$ TZ=UTC date --date='2020-03-01 00:00:00Z + 5 minutes' '+%B,%d,%Y %H:%M:%S'
March,01,2020 00:05:00

然后你需要像这样循环文件的内容(未经测试):

current_date='2020-03-01 00:00:00Z'
while IFS= read -r line
do
    sed -i "s/REPLACE_ME/$(TZ=UTC date --date="$current_date" +%B,%d,%Y %H:%M:%S)/" "$line"
    current_date="$(TZ=UTC date --date="$current_date + 5 minutes")"
done

推荐阅读