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


40

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

2013.06.14.12.10.02

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

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

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

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

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


В вашем примере нет завершающих нулей (ну, если вы не посчитаете 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

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

4

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

alias date='date +"%Y.%m.%d.%H.%M.%S" | sed "s/^0*//g; s/\.0*/./g"'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.