在日志中查找任何以毫秒为单位的纪元时间并将其替换为人类可读的时间

在日志中查找任何以毫秒为单位的纪元时间并将其替换为人类可读的时间

我想查找所有纪元时间并将其替换为人类可读的时间(以毫秒为单位)。我已经找到了如何做到这一点的解决方案,例如,如果纪元时间位于第一列,但不是随机搜索 13 位数字并将其替换为“23:59:59 01.01.1980”这样的时间,这将是在Linux机器上完成

所以纪元可能是这样的:

sms address="+********" body="这是一些示例文本

答案1

我会用perl

perl -MPOSIX -pe 's{(?<!\d)([1-9]\d{9})(\d{3})(?!\d)}{
                  strftime "%FT%T.$2%z",localtime$1}ge' < your-file

这里匹配以非 0 开头的 13 位数字(且不超过此数字)的序列,因此假设时间戳位于 2001-09-09T01:46:40.000+0000 - 2286-11-20T17:46:39.999+ 0000 范围使用明确的标准2021-05-03T15:47:59.300+0100格式(您可以strftime()根据自己的喜好调整格式)。

如果最终仍然重新格式化不属于时间戳的数字,您可以通过仅重新格式化特定范围内的数字来降低误报的风险,例如从一年前到现在:

perl -MPOSIX -pe '
  BEGIN{$start = ($end = time) - 366*24*60*60}
  s{(?<!\d)([1-9]\d{9})(\d{3})(?!\d)}{
    $start <= $1 && $1 <= $end ?
      strftime "%FT%T.$2%z",localtime$1 :
      $&
   }ge' < your-file

相关内容