Você pode fazer ...
while read line
do line=${line%%[!0-9]*}
[ -n "$line" ] || continue
: work w/ digits at line's head
done
Alternativamente - e provavelmente mais rápido - você pode fazer:
tr -cs 0-9\n \ |
while IFS=\ read num na
do ${num:+":"} continue
: work w/ first seq of digits on line
done
Ou se você quiser ignorar completamente qualquer linha que contenha qualquer coisa, exceto espaços, tabulações ou números, ou até mesmo qualquer linha que contenha dois números separados por espaço ...
b=${IFS%?}
grep "^[$b]*[0-9]\{1,\}[$b]*$" |
while read num; do : stuff with "$num"; done
Com case
você poderia fazer assim:
while read num
do case ${num:--} in
*[!0-9]*) continue;;esac
: something w/ $num
done