Usuwanie zer wiodących z danych wyjściowych daty

40

Utworzyłem alias polecenia date, aby wyświetlić datę w następującym formacie:

2013.06.14.12.10.02

za pomocą tego polecenia:

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

Wszystko działa świetnie, z wyjątkiem tego, że chcę usunąć wiodące zera z wyjścia.

Nie ma sposobu, aby tak się stało, zmieniając format. Myślę, że można to zrobić tylko przez przesłanie danych wyjściowych do innych poleceń, takich jak sedi awk.

System operacyjny, który używam, to Ubuntu 12.04.2 LTS.

łatwe
źródło
Brak końcowe zera w swoim przykładzie (no, chyba że liczyć 0w 10minutach ostatnie godziny, ale usunięcie że zmiany rozumieniu datownika). Rozumiem, że masz na myśli wiodące zera (zera na początku każdego składnika daty), w takim przypadku, jeśli używasz GNU userland @ j883376, odpowiedź prawdopodobnie będzie przydatna. W przeciwnym razie określ swoje środowisko (narzędzia użytkownika nie są takie same we wszystkich systemach uniksopodobnych, a nawet nie wszystkie narzędzia mogą być dostępne we wszystkich takich systemach operacyjnych).
CVn
tak, tytuł był nieprawidłowy, chociaż post był poprawny, przepraszam za zamieszanie.
easl
Bez obaw. Zasadniczo jednak zawsze dobrze jest określić swoje środowisko. OS X różni się od OpenBSD różni się od AIX różni się od GNU. Określając środowisko, nie ryzykujesz uzyskania odpowiedzi, które nie będą dla ciebie przydatne (na przykład odpowiedzi sugerujące użycie Linux / proc, gdy próbujesz rozwiązać problem w OS X).
CVn
2
Tylko uwaga: pamiętaj, że usunięcie zer wiodących utrudnia sortowanie według dat, jeśli zajdzie taka potrzeba.
Dubu
Zobacz ten post: stackoverflow.com/questions/47880412/…
codeforester

Odpowiedzi:

74

Zgodnie ze datestroną GNU :

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

   -      (hyphen) do not pad the field

Dlatego możesz to zrobić

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

i otrzymaj

2013.6.14.3.19.31
j883376
źródło
Znaleziono poprawną składnię do formatowania w stackoverflow.com/questions/29659069/…
user13107
4

Czuje się głupio, ale skoro to pytanie jest oznaczone /sed, oto sposób, aby to zrobić za pomocą sed, jak wspomniałeś :)

alias date='date +"%Y.%m.%d.%H.%M.%S" | sed "s/^0*//g; s/\.0*/./g"'
CoreyJJohnson
źródło