2014-03-24 156 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