从持续时间格式时间

时间:2018-05-17 14:04:50

标签: bash sed

我需要从持续时间格式时间删除连字符,并且我没有成功使用sed命令,因为我打算这样做。

原始输出:

00:0-26:0-8
00:0-28:0-30
00:0-28:0-4
00:0-28:0-28
00:0-27:0-54
00:0-27:0-19

预期输出:

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

我试着用命令但是我被困了。

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

4 个答案:

答案 0 :(得分:3)

使用sed

sed 's/\<[0-9]\>/0&/g;s/:00-/:/g' file

第一个命令s/\<[0-9]\>/0&/g正在添加零到单个数字的数字。

第二个命令s/:00-/:/g正在移除号码前面的0-

答案 1 :(得分:2)

仅显示您展示的示例,awk后面的内容可能对您有帮助。

awk -F":" '{for(i=1;i<=NF;i++){sub(/0-/,"",$i);$i=length($i)==1?0$i:$i}} 1' OFS=":"  Input_file

如果您想将输出保存到Input_file本身,那么也将> temp_file && mv temp_file Input_file附加到上面的命令。

答案 2 :(得分:1)

对于给定的例子,这个单行做的工作:

awk -F':0-' '{printf "%02d:%02d:%02d\n",$1,$2,$3}' file

答案 3 :(得分:0)

如果我的下面输出有两列“持续时间”?当我尝试使用上面的一个正则表达式时,为第一列持续时间/时间戳添加“0”并且我不希望这样,只需要修改由; 分隔的$ 7 = duration_time列。

01;12May2018 8:20:36;192.168.1.111;78787;192.168.1.111;78787;80:25:0-49;2018-05-12_111111;RO
02;14May2018 2:43:16;192.168.1.132;78787;192.168.1.111;78787;36:10:0-10;2018-05-12_111111;RO
03;15May2018 7:40:01;192.168.131.1;78787;192.168.1.111;78787;18:39:0-44;2018-05-12_111111;RO
04;15May2018 12:37:46;192.168.1.201;78787;192.168.1.111;78787;12:51:0-14;2018-05-12_111111;RO

这是输出:

root@root> sed 's/\<[0-9]\>/0&/g;s/:00-/:/g' temp_file
01;12May2018 08:20:36;192.168.01.111;78787;192.168.01.111;78787;80:25:49;2018-05-12_111111;RO
02;14May2018 02:43:16;192.168.01.132;78787;192.168.01.111;78787;36:10:10;2018-05-12_111111;RO
03;15May2018  07:40:01;192.168.131.01;78787;192.168.01.111;78787;18:39:44;2018-05-12_111111;RO
04;15May2018 12:37:46;192.168.01.201;78787;192.168.01.111;78787;12:51:14;2018-05-12_111111;RO