Установить порядок сортировки при сортировке оболочки, чтобы не игнорировать специальные символы

Установить порядок сортировки при сортировке оболочки, чтобы не игнорировать специальные символы

Я ищу решение для сортировки в postgres, но, похоже, это больше проблема сопоставления, поэтому я задаю вопрос о стандартной команде сортировки Unix.

У меня есть следующие данные:

A_A1
A\A2
A_A2
A\A1

после сортировки получаю:

cat test.txt |sort

A_A1
A\A1
A_A2
A\A2

но я хочу:

A_A1
A_A2
A\A1
A\A2

Я тоже пробовал, LANG=C cat...но безрезультатно. Так какое правило сортировки позволит мне не игнорировать специальные символы?

решение1

От man sort:

Set LC_ALL=C to get the traditional sort order that uses native byte values.

Так:

$ LC_ALL=C sort test.txt
A\A1
A\A2
A_A1
A_A2

поэтому локаль C выполняет сортировку по значению байта.


Тебе нужно сделать

$ cat test.txt | LC_ALL=C sort

если вы хотите передать его таким образом (но всегда старайтесь использовать версию имени файла напрямую, если она доступна).


Основная переменная окружения, влияющая на это, — LC_COLLATE. LC_ALLОднако если задано, то оно перекрывает все конкретные LC_значения. Если не задано ни LC_ALL, ни LC_COLLATE, то возвращается к LANG. Есличтоне задано, по умолчанию используется locale C.

Связанный контент