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