Мы можем обмануть и заменить символ-разделитель другим (например, символом NUL), который позволит «родной» сортировке работать, а затем вернуть его обратно.
например
tr x '\000' < file.txt | sort | tr '\000' x
Теперь нам, возможно, придется быть осторожными с влиянием локали на порядок, поэтому вам может потребоваться сделать
tr x '\000' < file.txt | LANG=C sort | tr '\000' x
Это работает только до тех пор, пока данные не содержат NUL!
Как это работает, может быть проще объяснить с помощью форматированной таблицы:
Нам нужно сравнить две строки:
ab | def
abc | def
Мы устанавливаем разделитель на NUL и сравниваем ab
с abc
.
стоит перед c
, поэтому мы правильно отсортировали по первому полю.
Теперь предположим, что первое поле совпадает, а второе поле отличается.
abc | def
abc | ghi
Теперь сравним abc
с abc
. У нас есть совпадение по первому полю и разделителю, и теперь мы выполняем сортировку по второму полю.
try:
rm -r -- -ltr
man rm:
Чтобы удалить файл, имя которого начинается с '-', например '-foo', используйте одну из этих команд:
$ rm -- -foo
OR
$ rm ./-foo