With grep-2.18-1.fc20.x86_64: $ echo 'a b' |grep --color=never -e 'a.b' a b $ echo 'a b' |grep --color=never -e 'a.?b' $ echo 'a b' |grep --color=never -P -e 'a.?b' a b grep fails to match a character with /.?/. It happens with cs_CZ.UTF-8 as well as with C locale.
From the man: > In basic regular expressions the meta-characters ?, +, {, |, (, and ) > lose their special meaning; instead use the backslashed versions \?, > \+, \{, \|, \(, and \). $ echo 'a b' |grep --color=never -e 'a.\?b' a b $ echo 'a b' |egrep --color=never -e 'a.?b' a b