Sed

sed 從 ics 文件的日期字元串中刪除時區

  • December 9, 2021

我有很多格式錯誤的 ics 文件。這是一個例子:

BEGIN:VCALENDAR
PRODID:-//cals.sig9.net//ptHolidays
VERSION:2.0
BEGIN:VEVENT
ORGANIZER;CN=Feriados Portugueses:MAILTO:nuno@sig9.net
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

正確地說,我需要將兩者中的日期轉換DTSTARTDTEND,例如,20221030T020000Z轉換為20221030.

為此,我正在嘗試使用以下命令:

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

但命令沒有改變,我不知道為什麼。

首先,我需要我的命令才能工作。

然後,我希望它僅適用於DTSTART並且DTEND(我希望DTSTAMP時間保持不變)以便calcurse接受我的 ics 文件。

使用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:nuno@sig9.net
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

引用自:https://unix.stackexchange.com/questions/680787