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

就可以了。

这将会给你留下一个空文件**文件名。

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

> 使用 echo -n 将会把空的输入写到文件中(有效地把空的输入附加到文件中(实际上什么也没做,只是把它写到了文件中)。

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

与 Bash 中的 > filename 相同,但可以在更多的 shell 中工作 (credit) . 将true内置的输出重定向到filename(没有输出)。

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

ZSH

>! filename

ZSH将使用io重定向操作符>来保护用户不被clobber文件。

如果你想让ZSH使用Bash的重定向行为,在没有保护文件不被clobbering的情况下,你需要为你的shell设置>!选项。 http://zsh.sourceforge.net/Doc/Release/Redirection.html

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

如果你想在vim编辑器内的命令行中进行,你可以尝试这样做:

vim file.txt
:1,$d

按Esc。

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。这里有一个单一的命令版本:

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

如果你需要sudo到超级用户权限来访问文件,那么接受的答案将是无效的。使用这个方法可以:

truncate -s0 file
sudo truncate -s0 file

或者明确地使用sudo:

&001

更多信息请看这里 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
``` &001 

这对同一目录下的日志文件很有帮助。
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