배쉬 시간 변환기

배쉬 시간 변환기

질문이 있습니다. 오전/오후 12시간 형식을 24시간 형식으로 변환하는 방법은 무엇입니까? 예를 들어, 표준 입력에서 다음과 같은 텍스트를 입력했습니다.

The event starts at 03:25PM and is expected to end at 06:17PM.
Registration will be opened from 09:00AM until 06:00 PM.
The event starts at 15:25 and is expected to end at 18:17.
Registration will be opened from 09:00 until 06:00 PM.

hh:mmPM 및 hh:mmAM을 모두 읽고 변환하는 방법은 무엇입니까? 하지만 나는 awk나 그와 유사한 것을 사용하고 싶지 않습니다. bash 루프, if/else, echo, sed 등만 사용하여 이 작업을 어떻게 수행할 수 있나요? 감사해요!

답변1

대체 번호를 생성하는 sed 스크립트:

#! /bin/bash
for pm in {0..11} ; do
    (( h = pm + 12 ))
    pm=$(printf %02d $pm)
    echo "s/$pm\(:[0-9][0-9]\) \?PM/$h\1/g"
done | sed -e 's/ \?AM//g' -f- input.txt

이 루프는 다음 스크립트를 생성합니다.

s/00\(:[0-9][0-9]\) \?PM/12\1/g
s/01\(:[0-9][0-9]\) \?PM/13\1/g
s/02\(:[0-9][0-9]\) \?PM/14\1/g
s/03\(:[0-9][0-9]\) \?PM/15\1/g
s/04\(:[0-9][0-9]\) \?PM/16\1/g
s/05\(:[0-9][0-9]\) \?PM/17\1/g
s/06\(:[0-9][0-9]\) \?PM/18\1/g
s/07\(:[0-9][0-9]\) \?PM/19\1/g
s/08\(:[0-9][0-9]\) \?PM/20\1/g
s/09\(:[0-9][0-9]\) \?PM/21\1/g
s/10\(:[0-9][0-9]\) \?PM/22\1/g
s/11\(:[0-9][0-9]\) \?PM/23\1/g

AM시간은 그대로 유지하면서 중복된 표현식을 제거합니다 .

관련 정보