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.