You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sed命令中结合date -d将时间戳转为易读日期格式?

解决shell脚本中时间戳转换与输出排版问题

你的核心问题是sed无法动态处理每行的时间戳——原来的$(date -d)会在脚本加载时就执行,而不是针对每行的时间值做转换。另外需要调整输出格式,把日期和标题合并为一行。

以下是修改后的完整脚本,针对13位毫秒级时间戳(如161145246842)做处理,同时调整输出排版:

function tvpsport(){
    wget -qO- 'https://sport.tvp.pl/' |
        grep -i -B 9 'video_id' |
        grep 'title\|broadcast_start\|video' |
        sed -e 's/"//g' \
            -e 's/,$//g' \
            -e 's/\\u2013/-/g' \
            -e 's/\\u0105/ą/g' \
            -e 's/\\u0119/ę/g' \
            -e 's/\\u0142/ł/g' \
            -e 's/\\u00f3/ó/g' \
            -e 's/\\u015a/Ś/g' \
            -e 's/\\u017a/ź/g' \
            -e 's/\\u017c/ż/g' \
            -e 's/\\u0144/ń/g' \
            -e 's/title : //g' \
            -e 's/broadcast_start : //g' \
            -e 's/video_id : /https:\/\/tvp.pl\/sess\/TVPlayer2\/embed.php?ID=/g' |
        awk '
            # 存储标题、时间戳、链接
            NR==1 { title=$0 }
            NR==2 { 
                # 13位毫秒时间戳转秒,再格式化为dd/mm/YYYY
                cmd = "date -d @" substr($0,1,10) "+%d/%m/%Y"
                cmd | getline date_str
                close(cmd)
            }
            NR==3 { print date_str " " title; print $0 }
        '
}

关键修改说明:

  • sed部分:移除了原来的broadcast_start替换逻辑,只保留时间戳本身,方便后续处理。
  • awk部分:
    1. 按行号分别存储标题(第1行)、时间戳(第2行)、链接(第3行)。
    2. 对13位时间戳取前10位(转成秒级Unix时间戳),调用date命令格式化为dd/mm/YYYY。
    3. 最后按要求输出:日期 标题,然后单独一行输出链接。

如果你的时间戳是10位秒级的(比如1611452468),只需把awk里的substr($0,1,10)改成$0即可。

内容的提问来源于stack exchange,提问作者rider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:01:14