我已经完成了所有主题,但仍然无法找到答案。
例如。
我有格式的时间戳:yyyy-mm-dd hh:mm:ss.xxx
其中xxx表示毫秒。
我想摆脱xxx部分,注意这个时间戳不在某个位置,所以我们不能将它作为行尾或行开头的一部分。(在unix命令或bash脚本中)
我能想到的方法是使用sed,但我所能做的只是获取模式,但不知道如何处理模式,似乎所有模式都是为了定位线而不是模式本身。所以我们通常可以想到这样的问题:如何使用sed来删除某个模式的最后几个字母。
感谢阅读。
注意xxx可以是0-999,所以它可以是1,2,3位数,样本就像:
asfd,asasfsf,afas,2017-10-20 13:22:22.0,333,222,0.002
nyh,nyhny,nhy,2 23 4 23 32:23:14.czxv,2017-10-20 13:22:22.234,12.0,234.22
nyh,nyhny,nhy,2017-10-20 13:22:22.234,12.0
wn,rrwn,daff,2017-10-20 13:22:32.543,12,32
我的期望是:
asfd,asasfsf,afas,2017-10-20 13:22:22,333,222,0.002
nyh,nyhny,nhy,2 23 4 23 32:23:14.czxv,2017-10-20 13:22:22,12.0,234.22
nyh,nyhny,nhy,2017-10-20 13:22:22,12.0
wn,rrwn,daff,2017-10-20 13:22:32,12,32
答案 0 :(得分:1)
根据OP显示的Input_file提出了新的以下解决方案。
awk '{sub(/\.[^,]*/,"",$2)} 1' Input_file
说明: 此处还添加了awk代码说明。
awk '{
sub(/\.[^,]*/,"",$2) ##sub is awk in-built utility, which will substitute on basis of sub(text/regex which we need to replace,"new_text"/variable_value,For a current line/variable/field), so in this case I am using a REGEX which will look from a DOT to first occurrence of comma(,) which I am substituting with NULL in 2nd field(your 2nd field is the one which is having timing details because awk has space as delimiter by default).
}
1 ##awk works on method of condition then action. So Here I am making condition TRUE by mentioning 1 and no action is mentioned so be default print action will happen.
' Input_file
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed 's/\(....-..-.. ..:..:..\)\..../\1/g' file
这非常懒惰,但最有可能在99%的时间内都有效。它匹配时间戳分隔符,然后在结尾处删除.xxx
。如果你愿意,你可以更具体,即
sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\)\.[0-9]\{3\}/\1/g' file
使用-r
选项删除牙签:
sed -r 's/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})\.[0-9]{3}/\1/g' file