Сортировать не сортировка строк с трубой «|» В нем правильно

Вы можете поместить пароль в файл и повторно использовать его с параметром - файл ключа . Использование случайного ключевого файла вместо ключевой фразы в виде открытого текста в такой настройке может быть предпочтительнее.

echo -n password > pwfile
for luks in md1 md2 md3
do
    cryptsetup luksOpen --key-file=pwfile /dev/"$luks" luks"$luks"
done

Лично я использовал несколько иной подход с зашифрованными ключевыми файлами LUKS:

В этой настройке одиночная фраза-пароль разблокирует хранилище ключевых файлов, которое содержит случайные ключи для различных других контейнеров LUKS. Это особенно полезно для / boot в настройках USB, поэтому / boot нельзя подделать, и одного аппаратного кейлоггера недостаточно для получения ключей для внутренних дисков.

17
12.12.2018, 05:32
3 ответа

sortзависит от локали, поэтому в зависимости от настройки COLLATE (LC _, которая унаследована от LANG ), вы можете получить разные результаты:

$ LANG=C sort sort_fail.csv 
241|212|20810378
241|213|20810376
24|121|2810172
column_a|column_b|column_c

$ LANG=en_US sort sort_fail.csv
241|212|20810378
24|121|2810172
241|213|20810376
column_a|column_b|column_c

Это может привести к проблемам в скриптах, поскольку вы можете не знать, какая локаль вызова установлена, и поэтому можете получить разные результаты.

Сценарии нередко принудительно устанавливают необходимые настройки

напр.

$ grep 'LC.*sort' /bin/precat
      LC_COLLATE=C sort -u | prezip-bin -z "$cmd: $2"

Теперь интересно то, что символ |выглядит странно.

Но это потому, что правило по умолчанию для en _US, которое происходит от ISO, говорит

$ grep 007C /usr/share/i18n/locales/iso14651_t1_common
<U007C> IGNORE;IGNORE;IGNORE;<j> # 142 |

Это означает, что символ |игнорируется и порядок сортировки будет таким, как если бы этот символ не существовал.

$ tr -d '|' < sort_fail.csv | LANG=C sort
24121220810378
241212810172
24121320810376
column_acolumn_bcolumn_c

И это соответствует "неожиданной" сортировке, которую вы видите.

Обходной путь: использовать-n(для принудительной числовой сортировки ), или использовать разделитель полей (, как вы делали ), или использовать локаль C.

32
27.01.2020, 19:46

Что меня раздражает, так это то, что 24не смещается со своего места между двумя 241. Второе поле начинается с 1. При попытке сортировки с ведущим 4во втором поле 24перемещается вниз, поэтому я подозреваю, что sortпросто игнорирует |, если не указано иное. Попробуйте sort -n...

1
27.01.2020, 19:46

- n, --числовая -сортировка сравнивать по числовому значению строки

210
23

Без -n, 210 по тексту опережает 23, как идет символ моего персонажа.

1
27.01.2020, 19:46

Теги

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