grep não usa globs; usa expressões regulares . Consequentemente, tente algo como:
$ disp_x=$(grep '..\...\..._..\...' myfile.txt)
$ echo "$disp_x"
29.04.16_09.35
04.05.16_15.01
Em um glob, ? significa qualquer caractere. Por contraste, em expressões regulares, ? significa zero ou movimento do caractere anterior. Para obter qualquer caractere em um regex, use . . Para obter um período literal na regex, escape: \. .
Ou, para exigir números:
$ disp_x=$(grep -E '[[:digit:].]{8}_[[:digit:].]{5}' myfile.txt)
$ echo "$disp_x"
29.04.16_09.35
04.05.16_15.01
[:digit:] corresponde a qualquer dígito. Ao contrário de [0-9] , é seguro para unicode.