vim搜索epoch时间字符串,管道到日期-d并将日期返回到文件中



我有一个文件,里面有很多数据,其中一个是最后修改的="1231231231"

其中1231231231是以毫秒为单位的历元时间

<Translation 
  author_id="25" 
  id="02f18edd-ef7a-48e2-b614-b5888936017e"
  language="de_DE" 
  last_modified="1325669156960" 
  phase="1" 
  target="[ phase=&quot;1&quot; language=&quot;de_DE&quot; ]"
  translation_text="Funktionen"/>

注意:last_modified="1325669156960"

我可以运行这个:

:%s/([0-9]{10})([0-9]{3})/1/g  

查找所有这些事件并用"秒"字符串替换:

last_modified="1325669156"

然后,我可以对这10个数字进行模式匹配,我想做的是将它们传输到unix data-d命令,以返回格式化的数据戳:

:%s/[0-9]{10}/&/g 

在这个例子中,没有替换为与我发现的相同的值(即&)

我想以某种方式将这个值传递到本质上的

date -d &

并将其作为格式化的时间戳返回

last_modified="Wed Jan  4 07:13:32 MST 2012"

有什么想法吗?我必须每隔一周在各种文件上这样做一次。

您可以在vim中使用strftime()。找到一个合适的格式字符串来满足您的需求
我在这里使用%c

:%s/last_modified="zs(d{10})d{3}/=strftime('%c', str2nr(submatch(1)))/g

结果:

<Translation 
  author_id="25" 
  id="02f18edd-ef7a-48e2-b614-b5888936017e"
  language="de_DE" 
  last_modified="2012-1-4 17:25:56" 
  phase="1" 
  target="[ phase=&quot;1&quot; language=&quot;de_DE&quot; ]"
  translation_text="Funktionen"/>

最新更新