如何去除时长格式时间中的连字符?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
相关产品推荐
相关产品推荐

