如何清除文件中的文本?

如何清除文件中的文本?

如何在不打开文本文件的情况下清除其中存在的文本?

我的意思是,例如我有一个文件,hello.txt里面有一些文本数据,我怎样才能清除该文件中的所有文本不用打开吗?

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

答案1

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

 > hello.txt

就是这样,即使不打开该文件,其中的数据也会被清除。

例子:

在此处输入图片描述

答案2

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

: > hello.txt

答案3

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

cat /dev/null > hello.txt

这会删除文件的全部内容,只留下一个空文件,而不必在编辑器中打开它、选择文本或执行任何其他操作。更具体地说,它的作用是将文件的内容替换为“/dev/null”的内容,或者什么都不替换。实际上,这非常巧妙。

唯一需要注意的是,您当前登录的用户必须对该文件具有写权限。

答案4

另一种方法-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:$ 

为什么这样做有效,又是如何工作的?testFile.txt将使用标志打开,这意味着如果文件存在 - 它将会被截断,这意味着内容将被丢弃,大小将被设置为零。这与shell 中运算符在其右侧打开文件时O_WRONLY|O_TRUNC使用的标志相同。>

接下来,cp将尝试读取/dev/null,读取 0 字节后将关闭两个文件,从而使testFile.txt文件被截断并且内容被有效删除。

知道了这一点,理论上我们可以使用任何允许我们打开文件的东西O_TRUNC。例如:

dd of=testFile.txt count=0

这里的小区别是根本dd不会执行任何操作read()。此dd版本的最大优点是它是 POSIX 可移植的。dd 规格状态:

如果未指定 seek=expr 转换,则在指定了明确的 of=file 操作数的情况下,输出文件应在开始复制之前截断,除非指定了 conv=notrunc。

相比之下,cp /dev/null testFile.txt它不一定是可移植的,因为cp 的 POSIX 规范介绍仅当 source_file 为非常规文件且指定-r/标志时才会发生的情况(非常感谢-R史蒂芬·基特感谢指出这一点),但不知道省略-r或时会发生什么-R,这里就是这种情况。不过,至少 GNUcp默认使用同一规范中的规则 3,即截断现有文件而不更改其类型。

相关内容