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

时间:2012-03-02 02:46:01

标签: linux shell vim sed

我有一个包含大量数据的文件,其中一个是最后修改过的=“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 

在这个例子中,不是替换为我找到的相同值(即,&amp;),

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

date -d &

并将其作为

中的格式化时间戳记返回
last_modified="Wed Jan  4 07:13:32 MST 2012"

关于如何做到这一点的任何想法?我必须每隔一周在各种文件上这样做。

1 个答案:

答案 0 :(得分:2)

您可以在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"/>