vim ищет строки времени эпохи, трубу к дате -d и возвращает дату в файл - PullRequest
0 голосов
/ 02 марта 2012

У меня есть файл с большим количеством данных, один из которых является последним измененным = "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"

Есть идеи, как это сделать? Я должен делать это примерно каждую неделю на разных файлах.

1 Ответ

3 голосов
/ 02 марта 2012

Вы можете использовать strftime() в vim.Найдите подходящую строку формата, соответствующую вашим потребностям.
Я использую %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"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...