Как выполнить любую команду, редактируя свой файл (аргумент) «на месте», используя bash? - PullRequest
108 голосов
/ 28 сентября 2008

У меня есть файл temp.txt, который я хочу отсортировать с помощью команды sort в bash.

Я хочу, чтобы отсортированные результаты заменили исходный файл.

Это не работает, например (я получаю пустой файл):

sortx temp.txt > temp.txt

Можно ли сделать это в одну строку, не прибегая к копированию во временные файлы?


EDIT: опция -o очень крутая для sort. Я использовал sort в своем вопросе в качестве примера. Я столкнулся с той же проблемой с другими командами:

uniq temp.txt > temp.txt.

Есть ли лучшее общее решение?

Ответы [ 14 ]

1 голос
/ 28 сентября 2008

Используйте аргумент --output= или -o

Только что попробовал на FreeBSD:

sort temp.txt -otemp.txt
1 голос
/ 28 сентября 2008

Читайте в неинтерактивном редакторе, ex.

0 голосов
/ 27 июля 2016

Другое решение:

uniq file 1<> file
0 голосов
/ 28 сентября 2008

Если вы настаиваете на использовании программы sort, вы должны использовать промежуточный файл - я не думаю, что sort имеет возможность сортировки в памяти. Любой другой трюк с stdin / stdout не удастся, если вы не можете гарантировать, что размер буфера для stdin сортировки будет достаточно большим, чтобы вместить весь файл.

Редактировать: позор мне. sort temp.txt -o temp.txt отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...