Когда мы используем команду sort file
файл показывает свое содержимое в порядке сортировки, что, если я не хочу получать какой-либо вывод, кроме отсортированного файла?
Как отсортировать файл на месте
Ответ 1
Вы можете использовать перенаправление файлов для перенаправления отсортированного вывода:
sort input-file > output_file
Или вы можете использовать -o
, --output=FILE
для указания того же файла ввода и вывода:
sort -o file file
Примечание. Распространенной ошибкой является попытка перенаправить вывод в один и тот же входной файл (например, sort file > file
). Это не работает, поскольку оболочка выполняет перенаправления (не программа sort (1)), а входной файл (как и выходной) также будет удален непосредственно перед тем, как дать программе sort (1) возможность прочитать ее.
Ответ 2
Команда sort
выводит результат операции сортировки на стандартный вывод по умолчанию. Чтобы добиться "на месте", вы можете сделать это:
sort -o file file
Это перезаписывает вход file
с отсортированным выводом. Переключатель -o
, используемый для указания вывода, определяется POSIX, поэтому должен быть доступен для всех версий sort
:
-o Укажите имя выходного файла, который будет использоваться вместо стандартного вывода. Этот файл может быть таким же, как один из входных файлов.
Если вам не хватает версии sort
без переключателя -o
(Luis уверяет меня, что они существуют), вы можете достичь "на месте" редактировать стандартным способом:
sort file > tmp && mv tmp file
Ответ 3
Чтобы отсортировать файл на месте, попробуйте:
echo "$(sort your_file)" > your_file
Как объяснено в других ответах, вы не можете напрямую перенаправить вывод обратно во входной файл. Но вы можете сначала оценить команду sort
а затем перенаправить ее обратно в исходный файл. Таким образом, вы можете реализовать сортировку на месте.
Точно так же вы можете применить этот трюк к другой команде, например, paste
чтобы реализовать построчное добавление.
Ответ 4
Вот подход, который (ab) использует vim
:
vim -c :sort -c :wq -E -s "${filename}"
Часть -c :sort -c :wq
вызывает команды vim после открытия файла. -E
и -s
необходимы для того, чтобы vim работал в "безголовом" режиме, который не обращается к терминалу.
Это почти не имеет преимуществ по сравнению с sort -o "${filename}" "${filename}"
за исключением того, что он принимает аргумент имени файла только один раз.
Это было полезно для меня, чтобы реализовать formatter
директивы в nanorc
записи для .gitignore
файлов. Вот что я использовал для этого:
syntax "gitignore" "\.gitignore$"
formatter vim -c :sort -c :wq -E -s
Ответ 5
Хотите отсортировать все файлы в папке и подпапке, переопределяя их?
Использовать этот:
find . -type f -exec sort {} -o {} \;
Ответ 6
sort file | sponge file
Это в следующем пакете Fedora:
moreutils : Additional unix utilities
Repo : fedora
Matched from:
Filename : /usr/bin/sponge