У меня есть файл журнала, в котором есть куча вещей, которые мне больше не нужны. Я хочу очистить содержимое.
Я знаю, как распечатать содержимое на экране:
cat file.log
Я знаю, как редактировать файл построчно:
nano file.log
Но я не хочу удалять каждую строку по одному. Есть ли способ сделать это в одной команде, не уничтожая файл, чтобы сделать это?
linux
command-line
Андрей
источник
источник
bash
качестве оболочки, а не, например,cmd.exe
или PowerShell, ни того, ни другого не достаточно POSIXy, чтобы ожидать, чтобы справиться с такими вещами.Вы можете использовать команду пользователя: truncate
("-s 0", чтобы указать размер)
http://www.commandlinefu.com/commands/view/12/empty-a-file
источник
sudo echo > file
просто выдает ошибку в таких случаях.sudo bash -c '> filename'
это то, как вы используете решения Bash с помощью sudo.brew install truncate
на OS X с установленным доморощенным.Вы могли бы сделать это:
Используется
>
для записи (нулевого) вводаecho -n
в файл.Используя
>>
бы добавить нулевой вклад в файл (фактически , ничего не делая , ноtouch
ИНГ его).источник
true
(или ее встроенный псевдоним:
), хотя в конечном итоге вам вообще не нужна команда (см. Принятый ответ).sudo
.То же, что и
> filename
в Bash, но работает в большем количестве оболочек (кредит) . Перенаправляет вывод изtrue
встроенного (который не имеет вывода) вfilename
.источник
:> filename
. Разве это не похоже на смайлик? :>ЗШ
ZSH защитит пользователей от клобинга файлов с помощью оператора перенаправления io
>
. Если вы используете,>!
вы можете форсировать существующий файл.Если вы хотите, чтобы ZSH использовал поведение перенаправления Bash, если защита от перехвата файлов отсутствует, вам нужно установить
clobber
параметр для вашей оболочки.Дополнительная информация: http://zsh.sourceforge.net/Doc/Release/Redirection.html
источник
Если вы хотите сделать это из редактора vim в командной строке, вы можете попробовать это:
Нажмите Esc.
Нажмите Enter.
Вы найдете все строки удалены.
источник
maillog
, дажеsudo > /var/log/maillog
неsudo > /var/log/maillog
средство - запустите sudo и поместите его вывод в файл. Очевидно, он выводит данные с разрешениями текущего пользователя. Проще сделать,sudo su
запустить корневую оболочку, а затем сделать> /var/log/maillog
.или же
с последующим
control-d
.или ... или ... или ...
Ах. Вот версия одной команды:
источник
echo "" > file.log
лучше, чемcat
вариант, который вы показываете, в этой ситуации есть другие, которыеcat
более уместны. оба используют одинаковое перенаправление оболочки для выполнения тяжелой работы.rm
выполнит задачу создания пустого файла с тем же именем. Но это не будет правильным для каждого варианта использования.Ниже команда также должна работать:
источник
Если для доступа к файлу вам нужны права sudo to superuser, то принятый ответ не будет работать. Используя это работает:
или явно с помощью sudo:
Более подробная информация здесь http://www.commandlinefu.com/commands/view/12/empty-a-file
источник
Несколько альтернатив:
источник
Если у вас есть пробелы в именах файлов, используйте:
(Я не мог включить это в комментарии к предыдущему ответу, потому что у меня нет 50 репутации. Иногда ограничения являются контрпродуктивными.)
источник
Одна строка за раз?
Попробуйте vi (m), прекрасный текстовый редактор, который может делать все что угодно. В этом случае перейдите к строке, нажмите d (для удаления) и снова d (для строки).
источник
gg
движется к вершине, так что вся последовательность может бытьggdG
.С моими разрешениями это единственное, что сработало:
источник
Кроме того, если у вас есть несколько файлов, вы можете использовать следующее:
Это полезно для файлов журнала в том же каталоге.
источник
> a.txt
То же, что и> имя файла в Bash, но работает в большем количестве оболочек (кредит). Перенаправляет вывод из встроенной функции true (которая не имеет вывода) в имя файла.
источник