Bash 如何使用sed将纳秒截断为毫秒

Bash 如何使用sed将纳秒截断为毫秒,bash,sed,text-processing,Bash,Sed,Text Processing,我有一个csv文件,其中包含2011-01-01 12:30:10.123456+00格式的时间戳,我想删除纳秒的最后3位,以获得2011-01-01 12:30:10.123+00 如何使用sed或类似的工具来实现这一点 需要注意的是,有时精度会有所不同。我只想保留周期后纳秒的前三位数 谢谢大家! 您可以这样做: var="2011-01-01 12:30:10.123456+00" echo $var | sed "s/\.*[0-9][0-9][0-9]+/+/g" 此gnu sed将保

我有一个csv文件,其中包含2011-01-01 12:30:10.123456+00格式的时间戳,我想删除纳秒的最后3位,以获得2011-01-01 12:30:10.123+00

如何使用sed或类似的工具来实现这一点

需要注意的是,有时精度会有所不同。我只想保留周期后纳秒的前三位数


谢谢大家!

您可以这样做:

var="2011-01-01 12:30:10.123456+00"
echo $var | sed "s/\.*[0-9][0-9][0-9]+/+/g"
此gnu sed将保留前3位数字,并删除所有其他数字:

cat file
2011-01-01 12:30:10.123456+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.12345678+00

sed -r "s/(\.[0-9]{3})[0-9]*/\1/g" file
2011-01-01 12:30:10.123+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.123+00
和平主义者的简写版本:

sed "s/\.*[0-9][0-9][0-9]+/+/g" file #original
sed "s/[0-9]\{3\}+/+/g" file         #Shorter version

2011-01-01 12:30:10.123+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.12345+00  #Both version gives more than 3 digits if its more than 6 total

对不起,编辑好了。你能检查一下我的理解吗第一个\。转义周期-该*匹配[0-9]零次或多次-第一个+匹配一个或多个先前的[0-9]?/+/是如何工作的?它确实是这样的,只是想确认我的理解,以便我可以考虑一些角落的案例。非常感谢。你能帮我理解正则表达式是如何工作的吗?我知道一般语法是sed/matchgroup1/matchgroup2/g,但我不知道替换是如何发生的。第二个匹配组似乎只是a+。让我们来看看@JW2和@Pacifist,这根本不是正则表达式的工作方式。默认情况下,Sed解释基本RE。所以+是文字,而不是前一个原子的一个或多个。在本例中,*使点成为可选的,脚本将去掉+前面的三个字符。使用var=2011-01-01 12:30:10.1234+00尝试此解决方案您的第一个答案是好的,但需要注意的是sed-r是GNU符号,并且不是通用的。见鬼,在sed中对ERE的支持不是通用的。我得到了sed:1:s/\[0-9]{3}[0-9]*/\1/g:\1在运行您的版本Jotne echo 2019-07-18 18:11:12.33244+00 | sed s/\[0-9]{3}[0-9]*/\1/g时,RE中没有定义echo 2019-07-18:11:12.33244+00 | sed s/[0-9]\{3}+/+/g较短版本的“和平主义”只会在句点后保留两位数字?@JW2您会得到两位数字,因为输入只有5位,此解决方案会删除最后三位数字。第一个失败,因为您错过了-r,所以它应该是echo 2019-07-18 18:11:12.33244+00 | sed-r s/\.[0-9]{3}[0-9]*/\1/GH您如何修改以保留前三个数字并删除剩余的+数字。在最初的问题中,我想保留前3位数字。到目前为止,解决方案似乎是像你所说的那样删除最后3个。只要抓取更多像sed-rs/[0-9]{2}:{2}[0-9]{2}\[0-9]{3}[0-9]*/\1/g这样的时间格式,如果这有助于你投票或接受答案。我们需要某种形式的胭脂吗?