Почему заглавные буквы включены в ряд строчных букв в регулярном выражении awk?

$ echo ABC | awk '$0 ~ /^[ab]/' ABC $ echo ABC | awk '$0 ~ /^[aa]/' $ echo ABC | awk '$0 ~ /^a/' $ 

Ты видишь. /[ab]/ фиксирует A , но /[aa]/ или /a/ нет. Зачем?

One Solution collect form web for “Почему заглавные буквы включены в ряд строчных букв в регулярном выражении awk?”

Я думаю, это проблема «локали».

В моей локали, it_IT, следующий фрагмент

 if [[ a < A ]]; then echo "a < A" elif [[ a > A ]]; then echo "a > A" else echo "a = A" fi if [[ b < A ]]; then echo "b < A" elif [[ b > A ]]; then echo "b > A" else echo "b = A" fi 

шоу

 a < A b > A 

так что A (удивительно) между a и b , поэтому в диапазоне.

Попробуйте выполнить

 echo ABC | LC_COLLATE=C awk '$0 ~ /^[ab]/' 

редактировать

следующая команда показывает порядок сортировки в вашей локали:

  echo $(LC_COLLATE=C printf '%s\n' {A..z} | sort) 

вывод на моей машине

  ` ^ _ [ ] a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z 

(не может понять из справочной страницы bash, если выражения последовательности разворачиваются в порядке упорядочения локали или нет, это не так).

  • как создать файл данных со столбцом даты от дня1 до дня?
  • Как использовать sed, awk или grep для удаления определенного шаблона, но все остальное
  • Сценарий оболочки читает отдельно столбцы из файла
  • Является ли это документированным поведением для BSD Awk или ошибка?
  • Awk удалить поле, только если числовое
  • Значения сумм в других столбцах для 1-го столбца с одинаковым идентификатором
  • Как вставить содержимое файла в другой файл перед шаблоном (маркером)?
  • Удалить дублирующую строку, если столбец 2 существует
  • awk отправить сообщение, если
  • Bash: как распечатать дополнительный столбец, соответствующий IP-адресу для имени
  • Как извлечь строку из файла в определенном состоянии
  • Linux и Unix - лучшая ОС в мире.