Иногда сортировка GNU ведет себя не так, как ожидалось. Вот пример:
> bind | sort
(Предполагается, что вы используете fish. В bash эквивалентом будет bind -p
.) Все не-альфа символы в выводе в основном игнорируются при сортировке, что подрывает намерение. Вот пример вывода:
bind --preset \e\b backward-kill-word
bind --preset \eb backward-word
bind --preset \e\[B down-or-search
bind --preset \e\< beginning-of-buffer
bind --preset \e cancel
bind --preset \ec capitalize-word
bind --preset \e\[C forward-char
bind --preset \e\[D backward-char
bind --preset \ed kill-word
Я хотел разместить все \e[a-z]
сочетания клавиш рядом друг с другом. Как изменить поведение sort, чтобы сортировать строго в порядке ASCII, обрабатывая все символы так же, как буквы? Я посмотрел на странице руководства и не нашел ничего полезного.
решение1
Вы правы, совершенно случайный незнакомец. В параметрах командной строки sort нет такой опции. Но sort можно заставить вести себя таким образом. Все, что вам нужно сделать, это изменить локаль:
> bind | LANG=C sort
...
bind --preset \e\x7f backward-kill-word
bind --preset \eb backward-word
bind --preset \ec capitalize-word
bind --preset \ed kill-word
bind --preset \ee edit_command_buffer
bind --preset \ef forward-word
bind --preset \eh __fish_man_page
bind --preset \el __fish_list_current_token
...