#!/bin/bash addmul="[0-9]+\ [+*]\ [0-9]+" singpar="\([0-9]+\)" part1=0 part2=0 while read -r l do m="$l" m=${l//(/((} m="(${m//)/))})" m=${m//\*/)*(} ((part2+=m)) while [[ $l =~ $addmul ]] do l=${l/"$BASH_REMATCH"/$((BASH_REMATCH))} if [[ $l =~ $singpar ]] then l=${l/"$BASH_REMATCH"/$((BASH_REMATCH))} fi done ((part1+=l)) done echo "$part1" echo "$part2"