GNU grep & find -регулярное выражение :Почему. необходимо в регулярном выражении, и почему я не могу использовать классы символов POSIX?

-k1,2 означает «сортировать все строки, сравнивая одновременно содержимое всех полей с 1 по 2»; поэтому «1,0 1» сравнивается с «10 2» и т. д.

-k1,1 -k2,2означает «сортировать все строки, сравнивая содержимое поля 1, а когда две строки имеют одинаковое содержимое в поле 1, сравнивая содержимое поля 2»; поэтому «1,0» сравнивается с «10», затем «2» с «4» и т. д.

То, что происходит затем, в обоих случаях сводится к сопоставлению, в частности к взвешиванию. Цифры обычно имеют больший вес, чем знаки препинания и пробелы. При сравнении «1,0 1» и «10 2» разница из-за запятой игнорируется, потому что цифры разные. При сравнении «1,0» и «10» единственная разница — это запятая, поэтому она больше не игнорируется. Подробнее см. ISO 14651 .

Вы можете установить LC_COLLATE=Cдля сопоставления только на основе значений символов без веса. Оба ваших примера приводят к

1,0 1
1,0 3
10 2
10 4

при использовании языкового стандарта «C».

-1
08.08.2020, 19:41
1 ответ
  1. *в синтаксисе регулярных выражений — это квантификатор , применяемый к предыдущему атому регулярного выражения (, в данном случае.). Это не сам по себе «ноль или более метасимволов», как это было бы в синтаксисе сопоставления шаблонов оболочки (, также известном как «подстановка» ).

  2. может быть идиосинкратией регулярного выражения Emacs по умолчанию -попробуйте -regextype posix-basicили -regextype egrep, например, если вы хотите более знакомое поведение.

3
18.03.2021, 23:14

Теги

Похожие вопросы