250

У меня есть файл журнала, в котором есть куча вещей, которые мне больше не нужны. Я хочу очистить содержимое.

Я знаю, как распечатать содержимое на экране:

cat file.log

Я знаю, как редактировать файл построчно:

nano file.log

Но я не хочу удалять каждую строку по одному. Есть ли способ сделать это в одной команде, не уничтожая файл, чтобы сделать это?

14 ответов14

418

В Bash, просто

> filename

Сделаю.

Это оставит вас с пустым именем файла.

п.с.

Если вам нужен sudo call, пожалуйста, подумайте об использовании truncate как ответили здесь.

99

Вы можете использовать команду пользователя: truncate

truncate -s 0 test.txt

("-s 0", чтобы указать размер)

http://www.commandlinefu.com/commands/view/12/empty-a-file

33

Вы могли бы сделать это:

echo -n "" > file.log

Использование > для записи (нулевого) ввода из echo -n в файл.

Использование >> будет добавлять нулевой вклад в файл (фактически не делая ничего , кроме touch ИНГ его).

22
: > file.log

То же, что и > filename в Bash, но работает в большем количестве оболочек (кредит). Перенаправляет вывод из true встроенного (который не имеет вывода) на filename .

9

ЗШ

>! filename

ZSH защитит пользователей от клобинга файлов с помощью оператора перенаправления io > . Если вы используете >! Вы можете форсировать существующий файл.

Если вы хотите, чтобы ZSH использовал поведение перенаправления Bash, если защита от перехвата файлов отсутствует, вам нужно установить опцию clobber для вашей оболочки.

Дополнительная информация: http://zsh.sourceforge.net/Doc/Release/Redirection.html

7

Если вы хотите сделать это из редактора vim в командной строке, вы можете попробовать это:

vim file.txt 

Нажмите Esc.

:1,$d

Нажмите Enter.

Вы найдете все строки удалены.

4
$ rm file.log; touch file.log

или же

$ cat > file.log

с последующим control-d .

или ... или ... или ...

Ах. Вот версия одной команды:

$ dd if=/dev/null of=file.log
4

Ниже команда также должна работать:

cat /dev/null > file.log
2

Если для доступа к файлу вам понадобятся привилегии sudo to superuser, то принятый ответ не будет работать. Использование этого действительно работает:

truncate -s0 file

или явно с помощью sudo:

sudo truncate -s0 file

Более подробная информация здесь http://www.commandlinefu.com/commands/view/12/empty-a-file

1

Если у вас есть пробелы в именах файлов, используйте:

for file in /path/to/file/*; do > "$file"; done

(Я не мог включить это в комментарии к предыдущему ответу, потому что у меня нет 50 репутации. Иногда ограничения противоречивы.)

0

Одна строка за раз?

Попробуйте vi(m), прекрасный текстовый редактор, который может делать все что угодно. В этом случае перейдите к строке, нажмите d (для удаления) и снова d (для строки).

0

Кроме того, если у вас есть несколько файлов, вы можете использовать следующее:

for file in /path/to/file/*; do > $file; done

Это полезно для файлов журнала в том же каталоге.

0

С моими разрешениями это единственное, что сработало:

touch temp.txt
sudo mv temp.txt original-file.txt
0

Несколько альтернатив:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .