-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».
*
в синтаксисе регулярных выражений — это квантификатор , применяемый к предыдущему атому регулярного выражения (, в данном случае.
). Это не сам по себе «ноль или более метасимволов», как это было бы в синтаксисе сопоставления шаблонов оболочки (, также известном как «подстановка» ).
может быть идиосинкратией регулярного выражения Emacs по умолчанию -попробуйте -regextype posix-basic
или -regextype egrep
, например, если вы хотите более знакомое поведение.