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

如何去除时长格式时间中的连字符?sed命令尝试未成功

解决时长格式中连字符的去除问题

我看到你尝试用sed和管道命令处理时长格式,但因为一个小错误导致结果不符合预期,咱们来一步步修正并简化方案。

你的问题根源

你最后一步的sed 's/00:0/0:/g'写错了替换目标——把00:0替换成0:会丢失前面的0,导致00:026变成0:26,这和你期望的00:26不符。只需要把替换改成s/00:0/00:/g就能修复这个问题,但其实我们可以用更简洁的命令完成整个操作。

方案1:简化管道命令

如果你的目标是提取第8个字段并修正格式,只需要调整最后一步的替换,同时简化管道:

sed 's/;/ /g' temp_file.txt | awk '{print $8}' | sed 's/-//g; s/00:0/00:/g'

解释:

  • 先把分号替换成空格(和你原来的步骤一致)
  • 提取第8个字段
  • 先去掉所有连字符,再把00:0修正为00:,这样00:026:08就变成了00:26:08

方案2:用单条sed命令处理整行

如果你需要保留其他字段,同时修正所有时间格式,可以用扩展正则匹配直接替换:

sed -E 's/(^| )00:0-([0-9]+):0-([0-9]+)/\100:\2:\3/g' temp_file.txt

解释:

  • -E启用扩展正则,方便分组捕获
  • 匹配每个时间串(前面是行首或空格),捕获0-后面的数字部分
  • 替换成00:捕获组1:捕获组2,直接得到正确格式

方案3:用awk一步到位

awk更适合处理字段级的修改,直接遍历字段并修正:

awk '{
    for(i=1; i<=NF; i++) {
        gsub(/-/, "", $i);  # 去掉所有连字符
        sub(/00:0/, "00:", $i);  # 修正开头的00:0为00:
    }
    print $8  # 提取第8个字段,若要输出整行直接写print即可
}' temp_file.txt

用以上任意方案都能得到你期望的输出:

00:26:08 00:28:30 00:28:04 00:28:28 00:27:54 00:27:19

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:33