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


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.