Para corresponder ao conteúdo de uma variável de shell em bash , zsh ou ksh93 :
re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches
POSIXly:
case $string in
("" | *[!,0-9]* | ,* | *, | *,,*) ;;
(*) echo matches;;
esac
Bournely:
expr " $string" : ' [0-9]\{1,\}\(,[0-9]\{1,\}\)*$' > /dev/null &&
echo matches
Para corresponder nas linhas de entrada:
grep -xE '[0-9]+(,[0-9]+)*'
Usamos + (ou o equivalente BRE \{1,\} ) para corresponder a 1 ou mais dígitos. * corresponderia a 0 ou mais.