我有一个日志文件,其中包含微秒格式的时间戳。我想用其他时区代替时间戳。
日志文件中的时间戳格式
043000000000 (04 Hr 30 Min 00 Sec 000 Millisecond 000 Microsecond)应该通过向其添加0530000000来替换它,使其成为
100000000000我只是想把CET中所有出现的时间戳转换成IST,增加05 Hr 30分钟。
我有一个linux机器和一个vim编辑器。我已经了解到,这可以通过vim与一些数学运算.But i的子匹配来实现,但无法弄清楚如何做到这一点。
任何帮助都很感激。
普拉宾
发布于 2014-03-12 09:44:10
这其中的关键确实是:help sub-replace-expression
有一些挑战:
0开始,Vim的自动字符串到数字转换将处理为八进制,而不是十进制数,因此需要使用基数为10的str2nr()进行显式转换。\d\{3}匹配这些数字。为了避免在其他地方出现错误的匹配,我使用^将模式锚定在行的开头,并断言(但不匹配)剩下的9位数与\ze\d\{9}匹配。:%s/^\d\{3}\ze\d\{9}/\=str2nr(submatch(0),10) +57/这假设一个简单的线性时间戳,如“秒自X”。如果这是一个非线性的HHMMSS-like格式,因为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')/https://stackoverflow.com/questions/22347215
复制相似问题