Удаление ведущих нулей из даты вывода

40

Я сделал псевдоним команды date для отображения даты в следующем формате:

2013.06.14.12.10.02

используя эту команду:

alias date = date +"%Y.%m.%d.%H.%M.%S"

Все отлично работает, за исключением того, что я хочу удалить начальные нули из вывода.

Нет способа сделать это, изменив формат. Я думаю, что это может быть сделано только путем передачи вывода в другие команды, такие как sedи awk.

Операционная система, на которой я работаю - Ubuntu 12.04.2 LTS.

EASL
источник
В вашем примере нет завершающих нулей (ну, если вы не посчитаете 0в 10минутах после часа, но удаление, которое изменит значение метки времени). Я предполагаю, что вы имеете в виду ведущие нули (нули в начале каждого компонента даты), и в этом случае, если вы используете GNU userland @ j883376, ответ , вероятно, будет полезен. В противном случае, пожалуйста, укажите свою среду (пользовательские инструменты не одинаковы во всех Unix-подобных ОС, и даже не все инструменты могут быть доступны во всех таких ОС).
CVn
да, название было неправильным, хотя сообщение было правильным, извините за путаницу.
easl
Не стоит беспокоиться. Однако, как правило, всегда полезно указывать свою среду. OS X отличается от OpenBSD, отличается от AIX, отличается от GNU. Указывая свою среду, вы не рискуете получить ответы, которые вам не пригодятся (например, ответы, предлагающие использовать Linux / proc, когда вы пытаетесь решить проблему в OS X).
CVn
2
Просто замечание: имейте в виду, что удаление начальных нулей затрудняет сортировку по этим датам, если вам когда-либо понадобится.
Дубу
Смотрите это сообщение: stackoverflow.com/questions/47880412/…
codeforester

Ответы:

74

Согласно dateсправочной странице GNU :

   By default, date  pads  numeric  fields  with  zeroes.   The  following
   optional flags may follow '%':

   -      (hyphen) do not pad the field

Поэтому вы можете сделать

alias date="date '+%Y.%-m.%-d.%-H.%-M.%-S'"

и получить

2013.6.14.3.19.31
j883376
источник
Правильный синтаксис для форматирования был найден в stackoverflow.com/questions/29659069/...
user13107
4

Кажется глупым, но так как этот вопрос помечен /sed, вот способ сделать это с помощью sed, как вы уже упоминали :)

alias date='date +"%Y.%m.%d.%H.%M.%S" | sed "s/^0*//g; s/\.0*/./g"'
CoreyJJohnson
источник