Видалення провідних нулів з виведення дати


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 Linux, коли ви намагаєтеся вирішити проблему в OS X).
CVn

2
Лише зауваження: майте на увазі, що видалення провідних нулів ускладнює сортування за цими датами, якщо вам це коли-небудь потрібно.
Дубу

Дивіться цей пост: stackoverflow.com/questions/47880412 / ...
codeforester

Відповіді:


74

Відповідно до GNU dateсторінки керівництва:

   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.