我知道如何将内容打印到屏幕上:
cat file.log
我知道如何编辑文件,逐行:
nano file.log
但是我不想一次删除每一行。有没有一种方法可以在不破坏文件的情况下用一个命令完成它?
#1 楼
在bash中,只需> filename
即可。
PS:如果需要
sudo
调用,请考虑使用此处回答的truncate
。#2 楼
您可以使用用户命令:truncatetruncate -s 0 test.txt
(“ -s 0”指定大小)
http:// www。 commandlinefu.com/commands/view/12/empty-a-file
评论
最好的解决方法是在非root用户(使用sudo)时起作用— sudo echo> file在这种情况下只会给出错误。
–德米特里·韦克霍图洛夫(Dmitry Verkhoturov)
15年8月19日在7:35
@DmitryVerkhoturov:sudo bash -c'> filename'是您如何在sudo中使用Bash解决方案。
– Stuart P. Bentley
2015年9月14日19:03在
brew install在安装了自制软件的os x上截断。
–xaxxon
16年7月4日在7:47
比回声更快
–iao1007
18年11月26日在6:30
#3 楼
您可以这样做:echo -n "" > file.log
使用
>
将来自echo -n
的(空)输入写入文件。使用
>>
将附加输入到文件的null输入(实际上只是对touch
进行了任何操作)。评论
这将在其中留出空间。
– dmckee ---前主持人小猫
2010-1-1的1:58
我得到这个:-bash ::找不到命令
–安德鲁(Andrew)
2010-1-1的3:52
echo“”>仍会为您提供一个字符(换行符)的文件。如果要使用echo,请使用“ echo -n> file.log”来回显null。
–戴夫·福加克
2012年5月4日19:47
最好使用专用的null输出命令,例如true(或其内置别名:),尽管最终您根本不需要命令(请参见接受的答案)。
– Stuart P. Bentley
2014年7月25日下午5:09
您可能对sudo有一些问题。
–烙饼
19年1月10日在2:44
#4 楼
: > file.log
与Bash中的
> filename
相同,但可在更多shell中使用(贷记)。将输出从内置的true
(无输出)重定向到filename
。评论
我来回答这个问题,但是可惜它已经在这里了……请接受投票。
–亚伦·霍尔
2014-12-29 3:38
只要做:> filename。看起来像是一个笑脸吗? :>
– minmaxavg
2015年9月14日在2:37
#5 楼
ZSH>! filename
ZSH将使用io重定向操作符
>
保护用户避免破坏文件。如果使用>!
,则可以强制截断现有文件。 如果希望ZSH使用Bash的重定向行为,如果没有防止文件破坏的保护,则需要为shell设置
clobber
选项。更多信息: http://zsh.sourceforge.net/Doc/Release/Redirection.html
#6 楼
如果要在命令行的vim编辑器中进行操作,则可以尝试以下操作:vim file.txt
按Esc键。
:1,$d
按Enter。
您将找到所有已删除的行。
评论
这是唯一适用于我的邮件日志的东西,即使sudo> / var / log / maillog也无法清除它(权限被拒绝)
– bobobobo
2014年1月16日0:00
@bobobobo不能像sudo一样工作> / var / log / maillog的意思-运行sudo,并将其输出放入文件中。显然,它以当前用户权限放置输出。做sudo su来启动root shell,然后执行> / var / log / maillog会更容易。
– kan
2014年10月1日上午10:13
#7 楼
$ rm file.log; touch file.log
或
$ cat > file.log
,然后
control-d
。或...或.. 。
啊。这是一个命令版本:
$ dd if=/dev/null of=file.log
评论
Thechickenmoo建议的echo“”> file.log优于您显示的cat选项,在这种情况下,在其他情况下cat更合适。两者都使用相同的外壳重定向进行繁重的工作。
–嘎嘎吉qua德
2010年1月1日4:57
您不需要运行cat命令。只需“>“ file.log”即可。
– camh
2010年1月1日,下午6:22
删除文件将重置创建日期。
–马特奥
13年7月16日在12:40
删除该文件将导致监视该文件的程序失去指向该文件的指针(即,该文件在文件系统中将具有新地址)。一般来说,是的rm将完成产生具有相同名称的空文件的任务。但这并不适合每个用例。
–robert
17年12月8日在23:21
#8 楼
下面的命令也应该起作用:cat /dev/null > file.log
评论
我多年来一直没有错误地使用过
– MaXi32
10月13日5:58
#9 楼
如果您需要sudo的超级用户特权才能访问该文件,则接受的答案将不起作用。使用此功能确实有效:truncate -s0 file
,或显式使用sudo:
sudo truncate -s0 file
更多信息,请访问http:// /www.commandlinefu.com/commands/view/12/empty-a-file
#10 楼
几种替代方法:ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log
#11 楼
如果文件名中有空格,请使用:for file in /path/to/file/*; do > "$file"; done
(我没有50的声誉,因此我无法将其包含在上一个答案的注释中。有时会受到限制相反的。)
#12 楼
可以使用sed
sed -i d filename
完成
评论
+1。而且您也可以使用awk来做,但这对于大型文件来说太慢了。
– Cuauhtli
6月14日20:41
#13 楼
清除文件的方法有多种,如下所示:echo "" > filename
cat /dev/null > filename
以下示例主要用于shell脚本编写
just# > filename
: > filename
#14 楼
一次一行吗?尝试使用vi(m)这个可爱的文本编辑器,它可以执行任何操作。
在这种情况下,导航到一行,按d(代表删除),然后再次d(用于行)。
评论
如果要删除vim中的整个文件,将光标放在文档顶部,请输入d G(即d,然后按shift-G)将删除整个文件(d表示删除,G表示结尾)。文件)。不过,我更喜欢您的方法(它使我有更多时间考虑我是否真的要删除文件)。
–巴布
2010年1月1日,下午4:19
@Babu gg移至顶部,因此整个序列可以为ggdG。
–鲍勃
2014年4月4日,0:22
#15 楼
经我许可,这是唯一有效的方法:touch temp.txt
sudo mv temp.txt original-file.txt
#16 楼
另外,如果有多个文件,则可以使用以下文件:for file in /path/to/file/*; do > $file; done
这对于同一目录中的日志文件很有用。
#17 楼
在Windows环境中:type nul >filename
评论
这可能是计算历史上最可靠的命令
– Blarg
2013年12月2日于16:34
相反,@ Arekkusandaa.Irujasukin;只要如上所述,只要您使用bash作为外壳程序而不是e,它就可以在任何Windows版本中正常工作。 G。 cmd.exe或PowerShell,两者都不具备POSIXy功能,无法处理此类问题。
–DopeGhoti
2015年2月5日在20:39
LInters抱怨,也许更优雅的是true> filename
– Pablo A
3月23日19:15