如何将文本追加到文件?

在Linux中向文件添加文本最简单的方法是什么?

我看了这个问题 ,但接受的答案使用了一个额外的程序( sed )我相信应该有一个更简单的方法与echo或类似的。

 cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn't matter. ^D 

实质上,您可以将所需的任何文本转储到文件中。 CTRL-D发送一个文件结束信号,它终止input并返回到shell。

怎么样:

 echo "hello" >> <filename> 

使用>>操作符将在文件末尾添加数据,如果已经存在,使用>会覆盖文件的内容。

你也可以用相同的方式使用printf

 printf "hello" >> <filename> 

请注意,使用上述可能是危险的。 例如,如果您已经有一个文件,并且需要将数据附加到文件的末尾,并且忘记添加最后一个>文件中的所有数据都将被销毁。 您可以通过在.bashrc设置noclobbervariables来更改此行为:

 set -o noclobber 

现在当你尝试echo "hello" > file.txt你会得到一个警告,说cannot overwrite existing file

要强制写入文件,现在必须使用特殊的语法:

 echo "hello" >| <filename> 

您还应该知道,默认情况下, echo会添加一个尾随的换行符,可以使用-n标志来禁止:

 echo -n "hello" >> <filename> 

参考

  • echo(1) - Linux man page
  • noclobber variable
  • I/O Redirection

其他可能的方法是:

 echo "text" | tee -a filename 

-a将在文件末尾追加。

跟进接受的答案。

如果在脚本中使用此命令,则需要CTRL-D以外的内容来指定结尾 。 试试这个:

 cat << EOF >> filename This is text entered via the keyboard or via a script. EOF 

这会将文本追加到规定的文件(不包括“EOF”)。

它利用这里的文件(或heredoc) 。

但是,如果您需要使用sudo来附加到所指定的文件,那么如果您直接在命令行上键入,则由于I / Oredirect而使用heredoc将会遇到麻烦。

当您直接在命令行上键入时,这种变化将起作用:

 sudo sh -c 'cat << EOF >> filename This is text entered via the keyboard. EOF' 

或者,您可以使用tee来避免在使用heredoc和cat时看到的命令行sudo问题:

 tee -a filename << EOF This is text entered via the keyboard or via a script. EOF