날짜 출력에서 ​​선행 0 제거


40

date 명령의 별칭을 만들어 다음 형식으로 날짜를 표시했습니다.

2013.06.14.12.10.02

이 명령을 사용하여 :

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

출력에서 선행 0을 제거하려는 것을 제외하고는 모든 것이 잘 작동합니다.

형식을 변경하여이를 수행 할 수있는 방법이 없습니다. 나는 출력을 sedand와 같은 다른 명령으로 파이프로만 연결하여 수행 할 수 있다고 생각합니다 awk.

내가 실행중인 OS는 Ubuntu 12.04.2 LTS입니다.


어떤이 없습니다 후행 제로는 예 (물론, 당신은 계산하지 않는 0에 10시간 과거 분 만 제거하는 변경 사항은 타임 스탬프의 의미 있음). 나는 당신이 선행 제로 (각 날짜 구성 요소의 시작 부분에서 제로) 를 의미한다고 생각합니다 .이 경우 GNU userland를 사용하는 경우 @ j883376의 대답 이 유용 할 것입니다. 그렇지 않으면, 환경을 지정하십시오 (사용자 도구는 모든 유닉스 계열 OS에서 동일하지 않으며 모든 도구가 모든 OS에서 사용 가능한 것은 아닙니다).
— CVn

예, 제목이 잘못되었지만 게시물이 정확했지만 혼란을 드려 죄송합니다.
— easl

걱정 마. 그러나 일반적으로 환경을 지정하는 것이 좋습니다. OS X은 OpenBSD와 다르며 AIX와는 다릅니다. GNU와 다릅니다. 환경을 지정하면 사용하지 않는 답변을 얻을 위험이 없습니다 (예 : OS X에서 문제를 해결하려고 할 때 Linux의 / proc 사용을 제안하는 답변).
— CVn

2
참고 : 선행 0을 제거하면 필요한 경우 날짜별로 정렬하기가 더 어렵다는 점에 유의하십시오.
— Dubu

답변:


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"'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.