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

おすすめ記事