Я делал некоторые ежедневные расчеты и внезапно обнаружил, что что-то вроде тривиального не работает:
$ echo T | grep [A-Z]
Нет совпадений.
Почему T не находится в диапазоне AZ?
Я немного изменил регулярное выражение:
$ echo T | grep [A-Y]
Совпадение!
Вау!Как T в AY, но не в AZ?
Очевидно, это потому, что мое окружение настроено на эстонский язык, где Y находится в конце алфавита, а Z где-то посередине: ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY
$ echo $LANG
et_EE.UTF-8
Все это стало для меня шоком.99% времени я использую компьютерный код, а не эстонскую литературу.Я все время использовал grep неправильно?Какие ошибки я совершил из-за этого в прошлом?
После нескольких попыток я нашел следующее решение:
$ echo T | LANG=C grep [A-Z]
Это рекомендуемый способсделать grep независимым от локали?
Далее больше ... было бы безопасно определить псевдоним так:
$ alias grep="LANG=C grep"
PS. I 'Мне также интересно, почему диапазоны символов, такие как [A-Z]
локаль, зависят в первую очередь, в то время как \w
, кажется, не зависят от локали (хотя в руководстве сказано, что \w
эквивалентно [[:alnum:]]
- но я выяснил, что последнеезависит от локали, а \w
- нет).