날짜에서 분을 변수로 제거

날짜에서 분을 변수로 제거

저는 KSH로 스크립트를 작성 중이며 날짜에서 분과 초를 제거하는 논리를 찾는 데 도움이 필요합니다. 사용자가 2024-12-22-16-43-40을 변수에 전달하면 2024-12-22-16-00-00으로 변환되어야 합니다.

답변1

ksh를 포함한 모든 POSIX 셸에서(POSIX sh 사양은 실제로 ksh(그 하위 집합)를 기반으로 함) ${var%pattern}끝에서 일치하는 가장 짧은 문자열의 제거된 값으로 확장하는 연산자는 실제로 80년대 초반에 ksh에 의해 발명되었습니다. 소개):$varpattern

$ date=2024-12-22-16-43-40
$ printf '%s\n' "${date%-*-*}-00-00"
2024-12-22-16-00-00

여기서는 날짜 연산보다 더 많은 문자열 연산을 수행하고 싶지만 내장 기능이 후자를 수행 printf할 수 있다는 점에 유의하세요. ksh93그러나 2024-12-22-16-43-40 형식은 기본적으로 지원하는 타임스탬프 형식에 포함되지 않습니다.

DATEMSK그러나 표준 환경 변수를 사용하여 다른 타임스탬프 형식을 지정할 수 있습니다.

$ echo '%Y-%m-%d-%H-%M-%S' > timefmt
$ export DATEMSK="$PWD/timefmt"
$ printf '%(%F-%H-00-00)T\n' "$date"
2024-12-22-16-00-00

답변2

다음과 같습니다: (텍스트 문자열로 생각하세요)

#!/bin/ksh
d="2024-12-22-16-43-40"
s="$(echo "$d" | cut -d- -f1-4 )"
t="${s}-00-00"
echo "$t"

또는 "날짜/시간"으로 처리하고 날짜를 읽고 구문 분석한 다음 `date +"%Y-%m-%d-00-00"을 통해 출력합니다 man date.date

관련 정보