que estaba haciendo alguna grepping todos los días y de repente descubrió que algo aparentemente trivial no funciona:¿Cómo hacer que grep [A-Z] sea independiente de la configuración regional?
$ echo T | grep [A-Z]
No hay resultados.
¿Cómo es que T no está dentro del rango A-Z?
me cambió la expresión regular un poquito:
$ echo T | grep [A-Y]
Un partido!
Whoa! ¿Cómo está T dentro de A-Y pero no dentro de A-Z?
Al parecer, esto se debe a mi entorno se establece en la configuración regional de Estonia, donde Y es al final del alfabeto, pero Z es en algún punto intermedio: ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY
$ echo $LANG
et_EE.UTF-8
Todo esto fue un poco de un choque de yo. El 99% del tiempo grep el código de la computadora, no la literatura estonia. ¿He estado usando grep de la manera incorrecta todo el tiempo? ¿Qué tipo de errores he cometido por esto en el pasado?
Después de probar varias cosas que llegamos a la siguiente solución:
$ echo T | LANG=C grep [A-Z]
¿Es esta la forma recomendada para hacer grep independiente de la Localidad?
Más más ... ¿sería seguro para definir un alias de esa manera:
$ alias grep="LANG=C grep"
PS. También me pregunto por qué los rangos de caracteres como [A-Z]
dependen de la configuración regional en primer lugar, mientras que \w
parece no ser afectado por la configuración regional (aunque el manual dice \w
es equivalente a [[:alnum:]]
- pero descubrí que este último depende de la configuración regional mientras \w
no).
Por favor intente todo de nuevo, pero cite su expresión 'grep '[A-Z]'', solo para asegurarse de que el shell no lo está expandiendo. – Mat
Funciona exactamente igual para mí con y sin comillas. –
Funciona de la misma manera porque no tiene un archivo llamado A hasta Z. El shell intentó expandir [A-Z], no encontró nada y lo dejó solo. Use comillas para pasar siempre los patrones a grep. – Gilbert