grep não pode ser usado para produzir partes de uma correspondência, mas por que não se livrar dos parênteses?
Isso funciona para o GNU grep :
grep -P '\(\d+\)' -o demo.txt | sed 's/[()]//g' | sort -nr | head -n1
O seguinte também funciona para o BSD grep , que você pode usar no OS X, por exemplo:
grep -E '\([[:digit:]]+\)' -o demo.txt | …
grep -E '\([0-9]+\)' -o demo.txt | …
Para obter o resultado desejado, adicionamos o argumento -n a sort para classificar numericamente, o que lhe dá 10 como o primeiro resultado.