sed는 ics 파일의 날짜 문자열에서 시간대를 제거합니다.

sed는 ics 파일의 날짜 문자열에서 시간대를 제거합니다.

잘못된 형식의 ics 파일이 많이 있습니다. 예는 다음과 같습니다.

BEGIN:VCALENDAR
PRODID:-//cals.sig9.net//ptHolidays
VERSION:2.0
BEGIN:VEVENT
ORGANIZER;CN=Feriados Portugueses:MAILTO:[email protected]
DTSTART;VALUE=DATE:20221030T020000Z
DTEND:20221030T020100Z
LOCATION;LANGUAGE=pt_PT;ENCODING=QUOTED-PRINTABLE:Portugal
TRANSP:OPAQUE
SEQUENCE:0
DTSTAMP:20211209T094211Z
SUMMARY;LANGUAGE=pt_PT;ENCODING=QUOTED-PRINTABLE: DST: Hora Inverno
PRIORITY:0
CLASS:PUBLIC
STATUS:CONFIRMED
UID:f59b372983f45e807fdac602160e3b96d5747708d86643e7ba1fc3aacd47087d
END:VEVENT
END:VCALENDAR

DTSTART정확하려면 날짜를 로 변환해야 합니다. DTEND예를 들어 20221030T020000Z로 변환해야 합니다 20221030.

이를 위해 다음 명령을 사용하려고 합니다.

sed -i s/T[[:digit:]]{6}Z//g *.ics

그러나 명령은 아무것도 변경하지 않았으며 그 이유를 모르겠습니다.

먼저 작동하려면 명령이 필요합니다. 그런 다음 내 ics 파일을 허용 하기 위해 및 (시간이 그대로 유지되기를 원함 )
에서만 작동하기를 원합니다 .DTSTARTDTENDDTSTAMPcalcurse

답변1

사용sed

$ sed  '/DTSTART\|DTEND/s/\(:[0-9]*\).*/\1/' input_file
BEGIN:VCALENDAR
PRODID:-//cals.sig9.net//ptHolidays
VERSION:2.0
BEGIN:VEVENT
ORGANIZER;CN=Feriados Portugueses:MAILTO:[email protected]
DTSTART;VALUE=DATE:20221030
DTEND:20221030
LOCATION;LANGUAGE=pt_PT;ENCODING=QUOTED-PRINTABLE:Portugal
TRANSP:OPAQUE
SEQUENCE:0
DTSTAMP:20211209T094211Z
SUMMARY;LANGUAGE=pt_PT;ENCODING=QUOTED-PRINTABLE: DST: Hora Inverno
PRIORITY:0
CLASS:PUBLIC
STATUS:CONFIRMED
UID:f59b372983f45e807fdac602160e3b96d5747708d86643e7ba1fc3aacd47087d
END:VEVENT
END:VCALENDAR

관련 정보