我有很多格式错误的 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
为了正确起见,我需要将和from中的日期转换为DTEND
,例如20221030T020000Z
to 20221030
。
为此,我正在尝试使用以下命令:
sed -i s/T[[:digit:]]{6}Z//g *.ics
但该命令没有改变任何内容,我不知道为什么。
首先,我需要我的命令才能工作。
然后,我希望它仅适用于DTSTART
和DTEND
(我希望DTSTAMP
时间保持完整),以便calcurse
接受我的 ics 文件。
答案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