2014-03-24 126 views
0

我有一个json文件,其中有很多时间戳。该文件可以包含数千个上千个时间戳。目前这些时间戳格式为dd/MM/yyyy HH:mm:ss.microseconds(小数点后6位)。Bash正则表达式查找替换

我想索引这些到elasticsearch,但我真的不知道如何得到这个在没有将日期格式转换为毫秒而不是微秒。

如何在bash中编写某些东西,可以用所提及的格式搜索和替换日期的所有出现,并将其替换为截断为3位而不是6的相同时间戳?我甚至不确定从哪里开始。

+0

请勿使用'bash'来解析JSON;使用适当的JSON解析器可用的语言。 – chepner

+0

我会,如果这是我需要做很多事情,但这只是一个。 –

回答

1

使用sed

d2='[0-9]\{2\}' 
sed -e "s=\($d2/$d2/$d2$d2 $d2:$d2:$d2\.[0-9]\{3\}\)[0-9]\{3\}=\1=g" 
1

用sed:

sed 's-\([0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]\)[0-9][0-9][0-9]-\1-g' file 

您可能要添加参数-i用于就地编辑(直接更新文件),但我建议先检查结果。

0

您可以使用猛砸。

while read line; do 
    if [[ $line =~ [0-9]{2}/[0-9]{2}/[0-9]{4}\ [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3} ]]; then 
     echo $BASH_REMATCH 
    fi 
done < file