【发布时间】:2021-05-15 01:58:37
【问题描述】:
我有一个看起来像这样的文件“tmp.txt”:
random text random text 25/06/2021 15:15:15
random text random text 26/06/2021 15:15:15
random text random text 26/06/2021 15:15:15
我想:
- 提取所有日期时间
- 增加 4 小时
- 将它们显示为时间戳
我还没有弄清楚如何添加小时,因为我面临日期函数无法识别日期格式的问题。
(如果可能的话,我希望能够使用单行命令来完成)
这是我当前的命令:
egrep -o "[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}" tmp.txt | while read -r line ; do echo $(date -d "$line" +%s);done
帮助表示赞赏!
【问题讨论】:
-
date可能假设为 MM/DD/YYYY。尝试先调试日期:date --debug -d "06/26/2021 15:15:15 4 hours" +%s -
perl -MPOSIX -nE 'while (m{(\d\d)/(\d\d)/(\d{4}) (\d\d):(\d\d):(\d\d)}g){ say strftime("%s",$6,$5,($4+4),$1,$2,($3-1900)) }' tmp.txt -
谢谢@jhnc!有没有办法每次用时间戳而不是初始日期打印行的其余部分?
-
顺便说一句,我对结果有疑问。我已经测试将 +4 替换为 +6 以额外测试 6 小时,它返回 1627240515 但结果应该是 1624648515