grep
La idea de un personaje depende de la localidad . Si está en una configuración regional que no es Unicode y selecciona un archivo con caracteres Unicode, entonces el recuento de caracteres no coincidirá. Si lo echo $LANG
haces, verás la ubicación en la que te encuentras.
Si establece las LC_CTYPE
y / o LANG
variables de entorno a un valor que termina con" .UTF-8" por lo que recibirá el comportamiento correcto:
$ cat data
étuis
letter
éééééé
$ LANG=C grep -E '^.{6}$' data
étuis
letter
$ LANG=en_US.UTF_8 grep -E '^.{6}$' data
letter
éééééé
$
Puede cambiar su configuración regional para un solo comando asignando la variable en la misma línea que el comando.
Con esta configuración, los caracteres de varios bytes se consideran caracteres únicos. Si desea excluir por completo los caracteres que no son ASCII, algunas de las otras respuestas tienen soluciones para usted.
Tenga en cuenta que todavía es posible que las cosas se rompan, o al menos no hagan exactamente lo que espera, en presencia de caracteres combinados . Su grep
puede tratar Letra latina minúscula E + COMBINACIÓN DE CARACTER AGUDO POR ENCIMA diferente que E Letra latina minúscula con acento agudo.
.
, algo asíwăsd's
coincidirá'
es un carácter que razonablemente puede ser parte de una "cadena con un número fijo de caracteres".LC_CTYPE
yLANG
, algo asíLC_CTYPE=en_US.UTF-8 LANG=en_US
será fallido. UsoLC_ALL
por seguridad.Prueba esto:
-x
se usa para hacer coincidir la línea completa y se define por POSIX (Ver grep )Vea aquí para una buena explicación de lo que
LC_ALL
hace. Puede configurarLANG
oLC_CTYPE
usar utf-8 para obtener el mismo comportamiento. El orden que toma efecto esLC_ALL
=>LANG
=>LC_CTYPE
.fuente
Con GNU
grep
cuando se construye con soporte PCRE, puede hacer:Mientras
.
coincide con un personaje,\X
coincide con un ideograma / gráfico.En un entorno local UTF-8:
En ese último
études
, hay 7 caracteres, 8 bytes y 6 grafemas.fuente
echo épée | grep -Px '\X{6}'
ouputépée
é
anteriores se codificaron en UTF-8).Podrías probar algo como:
grep "^[A-Za-z]\{6\}$" myfile.txt
o si las palabras también pueden contener números, entonces:
grep "^[A-Za-z0-9]\{6\}$" myfile.txt
Simplemente agregue cualquier carácter a los corchetes que desee además de estos.
fuente
étude
en absoluto, porque el carácter ASCII correspondiente al acento desordenará la expresión regular.