我有一个日志文件,其中包含微秒格式的时间戳。我想用其他时区替换时间戳。
日志文件中的时间戳格式
043000000000 (04 Hr 30 Min 00 Sec 000 Millisecond 000 Microsecond)
应该替换为添加 0530000000 ,以便它成为
100000000000
我只是尝试通过添加05小时30分钟将CET中所有出现的时间戳转换为IST。
我有一台linux机器和一个vim编辑器。我已经知道这可以通过vim与子匹配进行一些数学运算来完成。但是我无法弄清楚如何做到这一点。
任何帮助表示感谢。
Prabin
答案 0 :(得分:2)
关键是:help sub-replace-expression
:
存在一些挑战:
0
开头,因此Vim的自动字符串到数字转换会将其视为八进制,而不是十进制数字,因此需要使用基数为10的str2nr()
进行显式转换。\d\{3}
匹配那些。为避免在其他地方出现错误匹配,我将模式锚定到^
行的开头,并使用\ze\d\{9}
断言(但不匹配)其余9位数。:%s/^\d\{3}\ze\d\{9}/\=str2nr(submatch(0),10) +57/
假定一个简单的线性时间戳,如“自X以来的秒数”。如果这是一种类似非线性HHMMSS
的格式,因为Vim没有内置的日期算术,你必须自己编写一个正确的日期添加函数:
function! DateAdd( date, offset )
" Split into hours and minutes, do the addition with overflow handling here...
return addedDate
endfunction
:%s/^\d\{4}\ze\d\{8}/\=DateAdd(submatch(0), '0530')/