Com o BSD grep, veja man 7 re_format
para detalhes das expressões regulares suportadas. Em particular, diz:
A bound is '{' followed by an unsigned decimal integer, possibly followed
by ',' possibly followed by another unsigned decimal integer, always fol-
lowed by '}'. The integers must lie between 0 and RE_DUP_MAX (255=)
inclusive, and if there are two of them, the first may not exceed the
second.
Apenas o segundo número pode ser omitido; o primeiro tem para ser dado.
Com essa correção:
$ /usr/bin/grep --version
grep (BSD grep) 2.5.1-FreeBSD
$ /usr/bin/grep -Eo '\*\*[^*]{0,20}\*\*' foo
**circumstance**
**case**
**condition**
**Anxiety**
**anxiety**