man
Страница не дает мне большие надежды, но я надеюсь , что это документирован (и / или GNU-специфических) функция.
shell
files
io-redirection
cut
Хэнк Гей
источник
источник
.old
метод для изменений на месте,echo "$(cut -d , -f 1,3 <foo)" > foo
cut -d , -f 1,3 foo > foo.new
rm foo
mv foo.new foo
rm foo
. И вам не следует звонитьrm foo
, потому чтоmv foo.new foo
это атомарно: оно удаляет старую версию и одновременно устанавливает новую версию на место.В пакете moreutils из ubuntu (а также из Debian ) есть программа
sponge
, которая также решает вашу проблему.От мужского губка:
Что позволит вам сделать что-то вроде:
источник
Я не думаю, что это возможно, используя в
cut
одиночку. Я не мог найти это на странице человека или информации. Вы можете сделать что-то такое, какmktemp
делает вас относительно безопасным временным файлом, в который вы можете перенаправитьcut
вывод.источник
Попробуйте vim-way:
Это отредактирует файл на месте (сначала сделайте резервную копию).
В качестве альтернативы используют
grep
,sed
илиgawk
.источник
Вы можете использовать slurp с POSIX Awk:
пример
источник
Ну, поскольку
cut
выдает меньше информации, чем читает, вы можете сделать:То есть, сделать его стандартный
file
выводfile
открытым в режиме только для чтения, а стандартный вывод - открытым в режиме чтения + записи без усечения (<>
).Таким образом,
cut
файл будет перезаписан поверх самого себя. Тем не менее, оставшаяся часть файла останется нетронутой. Например, еслиfile
содержит:На выходе получится:
f\nb\n
Заменилиfoo\n
, ноbar
все же есть. Вам нужно будет обрезать файл послеcut
завершения.С помощью
ksh93
этого вы можете сделать это с помощью<>;
оператора, который действует так,<>
за исключением того, что, если команда выполнена успешно,ftruncate()
вызывается дескриптор файла. Так:С другими оболочками вам нужно будет сделать это с
ftruncate()
помощью других средств, таких как:хотя вызывать
perl
только для этого здесь немного излишне, особенно если учесть, чтоperl
это легко может сделатьcut
такую работу, как:Помните, что со всеми методами, которые включают фактическую перезапись на месте, если операция прерывается на полпути, вы получите поврежденный файл. Использование временного второго файла позволяет избежать этой проблемы.
источник