我想查找所有纪元时间并将其替换为人类可读的时间(以毫秒为单位)。我已经找到了如何做到这一点的解决方案,例如,如果纪元时间位于第一列,但不是随机搜索 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