сортировка файла с помощью команды sort и перезапись

Я пытался отсортировать текстовый файл и заменить отсортированный файл оригинальным, поэтому я установил, что файл также будет выводом команды сортировки, но когда я это делаю, он очищает содержимое файла и файл становится пустым, почему? я могу использовать другой файл для решения этой проблемы, но это не очень приятно: D, (и я использую Lubuntu.)

faav@faav-XPS-L501X:~$ cat test
A
C
B
faav@faav-XPS-L501X:~$ ls -l test
-rw-rw-r-- 1 faav faav 6 Apr 14 00:28 test
faav@faav-XPS-L501X:~$ sort test > test
faav@faav-XPS-L501X:~$ cat test
faav@faav-XPS-L501X:~$ ls -l test
-rw-rw-r-- 1 faav faav 0 Apr 14 00:28 test
4
задан 13 April 2015 в 23:01

3 ответа

Используйте -o опция sort вместо того, чтобы использовать оператор перенаправления, это отредактирует файл на месте.

От man sort :

-o, --output=FILE
              write result to FILE instead of standard output

Вот тест:

$ cat test.txt 
A
C
B

$ sort test.txt 
A
B
C

$ sort test.txt -o test.txt

$ cat test.txt 
A
B
C
6
ответ дан 13 April 2015 в 23:01

Это происходит, потому что вход / выходной файл является усеченным, прежде чем его содержание будет на самом деле считано, таким образом sort заканчивает тем, что читал уже пустой файл.

В целом (т.е. при перенаправлении вывода команды в ее входной файл, так как эта проблема не только происходит с sort), можно выполнить необходимую команду в подоболочке и сохранить ее вывод к переменной, затем сбросить содержание переменной в файл (например, с echo), этот способ задержать усечение входа / выходной файл к точке, где входной файл уже был считан:

tmp=$(sort test) && echo "$tmp" >  test

Также примечание, что это не очень эффективно для больших файлов, и что && оператор был выбран вместо ; для предотвращения усечения входа / выходной файл в случае отказа первой команды.

0
ответ дан 13 April 2015 в 23:01

Можно записать как вид-b-o имя файла имени файла , где имя файла указывает тот же файл дважды, как Вы хотите, чтобы вывод был сохранен или перезапись в исходный файл. Эта команда работает как, она должна удалить любые пробелы и вид содержание файла и перезаписи в исходный файл.

Затем можно распечатать содержание файла путем упоминания имя файла кошки , для печати содержания файла, как произведено на устройстве стандартного вывода.

Спасибо.

-1
ответ дан 3 August 2019 в 19:25

Другие вопросы по тегам:

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