Неразумно полагаться на то, что любая из этих команд будет работать так, как вы ожидаете.
Способ изменить файл на месте - записать измененную версию в новый файл, а затем переименовать новый файл в исходное имя:
sort file1 > file1.tmp && mv file1.tmp file1
Это позволяет избежать проблемы чтения файла после его частичной модификации, что может испортить результаты. Это также позволяет изящно справляться с ошибками; если длина файла составляет N байтов, а в файловой системе доступно только N / 2 байта пространства, вы можете обнаружить ошибку при создании временного файла и не выполнять переименование.
Или вы можете переименовать исходный файл, затем прочитать его и записать в новый файл с тем же именем:
mv file1 file1.bak && sort file1.bak > file1
Некоторые команды имеют опции для изменения файлов на месте (например, perl
и sed
обе имеют опции -i
(обратите внимание, что синтаксис опции sed -i
может отличаться). Но эти опции работают, создавая временные файлы, это просто сделано внутри.