O operador de expressão regular que corresponde a um único caractere é . . Isso é semelhante a ? em curingas de shell. * corresponde a qualquer número da coisa anterior em expressões regulares (por exemplo, a* corresponde a qualquer número (incluindo 0) de a s) e a qualquer número de caracteres em curingas de shell.
POSIXly, para encontrar linhas que correspondam e x efetivamente a isso:
grep -xE 'ex.{4}e'
Ou:
grep -x ex....e
Ou:
grep -x 'ex.\{4\}e'
O segundo dos quais é o mais portátil. grep '^ex....e$' iria até funcionar na implementação original no Unix Versão 4 (1973); no entanto -x foi adicionado no Unix Versão 7 (1979) e é universal hoje em dia, então você pode confiar nele.
Expressões regulares estendidas também foram adicionadas em egrep em V7, mas inicialmente sem os operadores {x,y} interval. Esse operador foi adicionado como \{x,y\} para grep , mas muitas vezes não em egrep , pois isso quebraria a compatibilidade com versões anteriores. No início dos anos noventa, no entanto, o POSIX introduziu a opção -E de grep para mesclar a funcionalidade egrep em grep e requer que o suporte {x,y} e egrep agora seja descontinuado.
No entanto, você ainda encontra algumas implementações grep que não suportam -E ou egrep que não oferecem suporte a {x,y} , como /bin/grep e /bin/egrep do Solaris (onde você precisa para usar /usr/xpg4/bin/grep ).
Tenha em atenção que algumas implementações de grep não são multibyte aware e o seu operador . regexp pode corresponder em cada byte de um caractere multibyte como os caracteres UTF-8 não-ASCII).
$ $ locale charmap
UTF-8
$ echo extrême | busybox grep -x ex....e
$ echo extrême | gnu-grep -x ex....e
extrême
$ echo extrême | busybox grep -x ex.....e
extrême
Como o caractere ê é feito de dois bytes em UTF-8, extrême tem 7 caracteres, mas 8 bytes:
$ printf %s extrême | wc -cm
7 8