#!/bin/sh function get_task_value { echo "$task_data" | grep "^$1" | sed -E "s/^$1 +//" } ids=$(task limit:none recur | grep -E '^ +[[:digit:]].*[[:alpha:]].*[[:digit:]]$' | sed -E 's/^ +([[:digit:]]+) .*/\1/') excluded_ids=$(for id in $ids do task_data="$(task $id)" echo "$(get_task_value 'Parent task') $(get_task_value 'Description' | sed 's/ /_/g') $(get_task_value 'Due') $id" done | sort | rev | uniq -f3 | rev | sed -E 's/.* ([[:digit:]]+)$/\1/') del_ids=$(for id in $excluded_ids $ids do echo $id done | sort | uniq -u) task $del_ids del