如何清除文件中的文字?


70

如何清除不打开文本文件中存在的文本?

我的意思是,例如,我有一个hello.txt包含一些文本数据的文件,并且如何在不打开该文件的情况下清除该文件中的全部文本

我的意思是不使用任何编辑器,例如nano,Gedit等。


1
“打开”文件是什么意思?到目前为止,在给出的所有答案中,该文件仍将打开以供Shell写入。最后,shell只是一个与其他程序一样的程序。
杰夫

@Jeff没有使用nano,gedit等任何东西。
rɑːd– 2013年

Hus787,如果您认为我没有打过电话,那么我欢迎您对我的问题感兴趣。
rɑːdʒɑ

我同意Jeff的评论...我也有意见*,无论使用任何文本编辑器还是重定向,都必须打开文件流才能对其进行写入。(*感谢提供建议的任何人以帮助解决此问题
准确

Answers:


138

只需使用CTRL+ ALT+ 打开终端T并输入

 > hello.txt

就是这样,您甚至无需打开该文件即可清除该文件中的数据。

例:

在此处输入图片说明


5
从技术上讲,该文件将被打开。只是不在编辑器中。
John Dibling 2013年

2
@JohnDibling实际上这是重定向,我相信这里没有打开文件。重定向中的内容将stdout覆盖现有文件(如果有)。在这种情况下,什么也没有stdout。因此,该文件将被void覆盖,如果有的话,基本上擦除了原始数据。
souravc

有没有办法撤消此命令?

@Rao,如果大于10GB,则可能是这样。但是多少不确定。
rɑːdʒɑ

28

截断文件最简单的方法是将shell no-op命令(:)的输出重定向到要擦除的文件。

: > hello.txt

2
它可能不是最简单的(相对于只>),但为什么它没有被任何这个高度看question..here的答案提到最快的sure..i难怪,采取+1 ..
heemayl

13

我还将使用重定向,例如rajagenupula的答案。但是有更多的灵活性。打开一个终端并输入

cat > hello.txt

然后按Ctrl+ C。它将清除先前的文件。如果您想要达到这个目的就可以了。

如果您希望清除文件后可以做更多的事情。这样,您不仅可以在不打开文件的情况下擦除文件,还可以在文件中以正确的格式写几行。假设您要在擦除文件后写“ Ubuntu是最好的操作系统”,只需

cat > hello.txt
Ubuntu is the 
best OS

然后按Ctrl+ C。现在,先前的文件已被清除。同时,我把它们放在两行中。

参见示例:

在此处输入图片说明


嘿,谢谢你的回答。这么少,但是工作之后进行权也与但仍有趣+ 1。
rɑːdʒɑ

>代表重定向。cat > file将写入stdout文件,覆盖任何现有文件。
souravc

10

我必须一直使用日志文件来执行此操作。我找到的最简单的方法是使用以下命令:

cat /dev/null > hello.txt

这将删除文件内容的所有内容,并为您留下一个空文件,而无需在编辑器中打开它,选择文本或任何其他东西。更具体地说,它的工作是将文件的内容替换为“ / dev / null”的内容,或者什么也不替换。实际上,它非常漂亮。

唯一的警告是您当前登录的用户必须对该文件具有写权限。


谢谢你的回答。请添加一个例子,以便它可以看起来更漂亮+ 1
rɑːdʒɑ

5

如果使用名称hello.txt创建了文件,并提供了一些文本,则终端ctrl+ alt+中的以下命令t将删除hello.txt文件中的所有文本,

echo "" > hello.txt

在此处输入图片说明


感谢您的回答,+ 1。请通过一些示例对其进行扩展,以使其看起来更加美观。
rɑːdʒɑ

3

另一种方法- cp/dev/null该文件

xieerqi:$ cat testFile.txt                                                                                        
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 83100492  26269816  76% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914492        4   2914488   1% /dev
tmpfs             585216     1152    584064   1% /run
none                5120        0      5120   0% /run/lock
none             2926072    98096   2827976   4% /run/shm
none              102400       76    102324   1% /run/user

xieerqi:$ cp /dev/null testFile.txt                                                                               

xieerqi:$ cat testFile.txt

xieerqi:$ 

你真棒!
Yasser Sinjab

2

不是最短的答案,而是...

该答案基于超级用户的另一个答案。尽管不是最短的bash命令,truncate但对于普通新手来说,它是最易读的:

$ echo Hello > Hello.txt
$ echo World! >> Hello.txt
$ cat Hello.txt
Hello
World!
$ truncate -s 0 Hello.txt
$ ll Hello.txt
-rw-rw-r-- 1 rick rick 0 Mar 20 17:32 Hello.txt

truncate此处与命令一起使用的参数:

  • “ -s”设置大小
  • “ 0”的大小将为零

清除除前10,000个字节以外的所有内容

的优点truncate是您可以指定保留多少,而不仅仅是零:

$ truncate -s 10000 Hello.txt

...将截断前10,000个字节后的所有内容。如果程序发疯并将大量兆字节的数据转储到一个小的日志文件中,这可能会很有用:

  • 运行truncate命令以将合理的较大正常大小设置为10K
  • 使用文本编辑器打开文件,然后按 End
  • 高亮显示并PgUp删除不属于您的剩余字节(通常可以通过ASCII垃圾字符识别)。

0

因此,我看到很多重定向被用来回答这个问题;)

组合的方法略有不同:rm&touch

rm hello.txt && touch hello.txt

是的...又是另一种作弊!

因此,使用此命令组合后,文件hello.txt并没有打开,最后您仍然将文件hello.txt替换为已清除的内容。就像您想要的一样!


3
我认为这不是一个很好的“作弊”工具,它可以更改文件权限...
Parto 2015年

1
删除可能会更好。它可能导致问题:迁移可能会改变。如果在日志文件上完成操作,则可能导致服务期望日志存在并且可写,从而导致服务出现意外行为。
Rinzwind

虽然这不是您感兴趣的最佳方法:要更正所有者/权限问题,请首先检查所有权和权限,然后附加此内容(根据需要进行调整):&& sudo chown user:group hello.txt && sudo chmod 644 hello.txt
克里斯(Chris)

索引节点号将被删除。将创建一个新的索引节点号。馊主意。
Dipankar Nalui

0
vi filename -c ':1,$d' -c ':wq'

因为获得了我的特别许可,所以对我来说效果最好


您可以通过详细说明所遇到的问题来改善此答案。您也可以解释什么是程序vi以及各种参数和参数的作用。
WinEunuuchs2Unix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.