2010-01-01 01:50:57 +0000 2010-01-01 01:50:57 +0000
297
297

Как очистить содержимое файла из командной строки?

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

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

cat file.log

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

nano file.log

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

Ответы (14)

488
488
488
2010-01-01 10:20:23 +0000

В bash, просто

> filename

подойдет.

Это оставит вам пустой файл имя файла.

p.s.

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

133
133
133
2013-08-20 14:21:43 +0000

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

truncate -s 0 test.txt

(“-s 0” для указания размера) http://www.commandlinefu.com/commands/view/12/empty-a-file

35
35
35
2010-01-01 01:55:01 +0000

Вы можете сделать так:

echo -n "" > file.log

Using > to write the (null) input from echo -n to the file.

Using >> would append the null input to the file (actually doing nothing but touching it).

30
30
30
2014-07-25 22:51:07 +0000
: > file.log

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

11
11
11
2012-12-06 20:48:34 +0000

ZSH

>! filename

ZSH защитит пользователей от компоновки файлов с помощью оператора io redirect >. Если вы используете >!, вы можете принудительно усечь существующий файл.

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

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

9
9
9
2012-09-12 18:21:28 +0000

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

vim file.txt

Нажмите Esc.

:1,$d

Нажмите Enter.

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

4
4
4
2016-05-10 12:45:57 +0000

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

cat /dev/null > file.log
4
4
4
2010-01-01 01:59:43 +0000
$ rm file.log; touch file.log

или

$ cat > file.log

, а затем control-d

или… или…

Ah. Вот единственная командная версия:

$ dd if=/dev/null of=file.log
```.
2
2
2
2015-01-30 19:11:35 +0000

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

truncate -s0 file

или явно с sudo:

sudo truncate -s0 file

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

1
1
1
2018-03-15 09:36:54 +0000

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

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

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

1
1
1
2015-10-25 22:27:56 +0000

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

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
0
0
0
2016-06-22 16:35:06 +0000

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

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

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

0
0
0
2010-01-01 03:14:40 +0000

По одной строке за раз?

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

0
0
0
2014-03-04 00:10:08 +0000

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

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

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

6
10
7
5
1