Сопоставьте только буквы ASCII в регулярном выражении, игнорируя умлауты

Я использую регулярное выражение в моем сценарии bash, например

REGEX="^[a-zA-Z0-9\-]+$" 

Я хочу отфильтровать все нестандартные слова, особенно слова, содержащие немецкие специальные символы äöüÄÖÜß

но в соответствии с этим руководством, если вы установите LOCALE на немецкий язык, регулярное выражение az также соответствует ö

Как я могу это решить?

Я уже пытался установить свои локали в начале сценария на английский с помощью:

 #!/bin/bash LANG=en_US.utf8 LANGUAGE=en_US.utf8 LC_ALL=en_US.utf8 export LANG export LANGUAGE export LC_ALL 

но никакого эффекта.

Я не хочу делать это обходное решение и заранее заменять специальные символы:

 tr _ -|tr . -|tr " " -|tr '[:upper:]' '[:lower:]'|sed 's/ä/ae/;s/ö/oe/;s/ü/ue/;s/ß/ss/g') 

Я бы предпочел узнать правильный путь.

One Solution collect form web for “Сопоставьте только буквы ASCII в регулярном выражении, игнорируя умлауты”

Использование:

 REGEXP='^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9-]+$' 

Чтобы выбрать нужные символы. То, что соответствует [az] гарантируется только [abcdefghijkmnopqrstuvwxyz] в локали C / POSIX.

(Я предполагаю, что вы не хотите, чтобы обратная косая черта была включена, но это была ошибочная попытка избежать - ).

Другой вариант – исправить локаль на C перед использованием инструмента, который оценивает, что ^[a-zA-Z0-9-]+$ расширенное регулярное выражение (или ^[[:alnum:]-]+$ ), например:

 LC_ALL=C grep -Ee "$REGEXP" 

Это справедливо в этом случае, но не в таких случаях, как REGEXP='[AZ]' если данные, соответствующие аргументу regexp, находятся в кодировке типа BIG5-HKSCS или GB18030 (и в локалях, которые используют тот же самый символ), где много символов имеют кодировки, которые содержат ту же кодировку, что и для AZ .

Пример, где [AZ] совпадает с Á (U + 00C1, кодируется как 0x88 0x57 в BIG5-HKSCS (где 0x57 также W )):

 $ LC_ALL=zh_HK.big5hkscs REGEXP='[AZ]' bash -c 'printf "\uc1\n" | LC_ALL=C grep -qe "$REGEXP" && echo match' match 
  • Отсутствующие символы в моем URXVT
  • Unicode (проблема Bengali-unijoy (m17n)
  • Монетный двор 17 (Корица): CTRL + Shift + U, не позволяющий вводить символы Юникода
  • Названия кириллических файлов были повреждены после обновления Slackware
  • копировать имена файлов со специальными символами на внешний том ntfs
  • Возобновление экрана с включенным символом ввода символов UTF8
  • sv_SE.UTF-8 Проблемы с Bash и VIM в iTerm2
  • Граница Tmux разделена на rxvt
  • Удивительные символы и символы в командной строке
  • ViM и Python говорят, что кодировка ANSI_X3.4-1968
  • потеря поддержки unicode urxvt при входе в систему как пользователь, корневая оболочка имеет их
  • Linux и Unix - лучшая ОС в мире.