我需要从持续时间格式时间删除连字符,并且我没有成功使用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'
答案 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