#!/usr/bin/env bash # # Given an ICS input file, write a new ICS output file with all the # alarms stripped out (BEGIN:VALARM -> END:VALARM) # # SPDX-License-Identifier: MIT if [ ! -r "$1" ]; then echo "Cannot read input file $1, exiting." exit 1 fi INFILE=$1 OUTFILE="${INFILE}.stripped" # create/truncate it so we can use >> later : > "${OUTFILE}" VERBOSE=1 READLINES=0 WROTELINES=0 EVENTCOUNT=0 ALARMCOUNT=0 GOTALARM=0 if [ ${VERBOSE} ]; then echo -n "Working" fi # preserve whitespace, don't interpret escapes # shellcheck disable=SC2004 while IFS=$'\n' read -r vline; do READLINES=$(($READLINES+1)) if [ ${VERBOSE} ]; then if [ $(($READLINES%100)) -eq 0 ]; then echo -n "." fi fi # use substring matching to avoid possible '\r' and '^M' on lines if [ "${vline:0:12}" == "BEGIN:VEVENT" ]; then EVENTCOUNT=$(($EVENTCOUNT+1)) fi if [ ${GOTALARM} -ne 1 ]; then if [ "${vline:0:12}" != "BEGIN:VALARM" ]; then # don't interpret escapes while writing echo -E "${vline}" >> "${OUTFILE}" WROTELINES=$(($WROTELINES+1)) continue else GOTALARM=1 continue fi else if [ "${vline:0:10}" == "END:VALARM" ]; then GOTALARM=0 ALARMCOUNT=$(($ALARMCOUNT+1)) fi continue fi done < "${INFILE}" if [ ${VERBOSE} ]; then echo "done." echo "Read ${READLINES} lines" echo "Wrote ${WROTELINES} lines" echo "Found ${EVENTCOUNT} events" echo "Stripped ${ALARMCOUNT} alarms" fi exit 0