Я пытался отсортировать текстовый файл и заменить отсортированный файл оригинальным, поэтому я установил, что файл также будет выводом команды сортировки, но когда я это делаю, он очищает содержимое файла и файл становится пустым, почему? я могу использовать другой файл для решения этой проблемы, но это не очень приятно: 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
Используйте -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
Это происходит, потому что вход / выходной файл является усеченным, прежде чем его содержание будет на самом деле считано, таким образом sort
заканчивает тем, что читал уже пустой файл.
В целом (т.е. при перенаправлении вывода команды в ее входной файл, так как эта проблема не только происходит с sort
), можно выполнить необходимую команду в подоболочке и сохранить ее вывод к переменной, затем сбросить содержание переменной в файл (например, с echo
), этот способ задержать усечение входа / выходной файл к точке, где входной файл уже был считан:
tmp=$(sort test) && echo "$tmp" > test
Также примечание, что это не очень эффективно для больших файлов, и что &&
оператор был выбран вместо ;
для предотвращения усечения входа / выходной файл в случае отказа первой команды.
Можно записать как вид-b-o имя файла имени файла , где имя файла указывает тот же файл дважды, как Вы хотите, чтобы вывод был сохранен или перезапись в исходный файл. Эта команда работает как, она должна удалить любые пробелы и вид содержание файла и перезаписи в исходный файл.
Затем можно распечатать содержание файла путем упоминания имя файла кошки , для печати содержания файла, как произведено на устройстве стандартного вывода.
Спасибо.