Использование -k1
заставит sort
использовать всю строку в качестве ключа сортировки. Это не то, что вы хотите.
Я предполагаю, что вы хотели бы использовать ex
и ex2
(, найденные в {...}
), в качестве ключа. Для этого укажите -k2
в качестве поля сортировки.
Это подберет все после первого {
и использует это как ключ.
\newacronym{ex}{EX}{Expanded}
^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^
field 1 f2 f3 field 4
\newacronym[a string]{ex2}{EX2}
^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^
field 1 f2 f3
Для только используйте второе поле в качестве ключа (, а не остальную часть строки ), используйте -k2,2
.
Тестирование:
$ sort -t '{' -k2,2 file
\newacronym[a string]{ex2}{EX2}
\newacronym{ex}{EX}{Expanded}
Строка по-прежнему выходит в неправильном порядке. Это связано с тем, что ex2}
сортируется до того, какex}
(}
идет после 2
в таблице ASCII, а я использую локаль POSIX ).
Повторная попытка, но на этот раз в Ubuntu с локалью en_US.UTF-8
(должна работать на любой glibc Linux и в большинстве локалей, кроме локалей C
или POSIX
):
$ LC_COLLATE="en_US.UTF-8" sort -t '{' -k2,2 file
\newacronym{ex}{EX}{Expanded}
\newacronym[a string]{ex2}{EX2}
В зависимости от региональных настроек вам может потребоваться добавить бит LC_COLLATE=...
или нет.
Обратите внимание, что sort
— это отдельная от оболочки bash
утилита, которая работает одинаково независимо от оболочки. Таким образом, это не вопрос типа «bash
», а просто вопрос sort
.