如何向文件追加文本?

在 Linux 中,将文本附加到文件的最简单方法是什么?

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

313502 次浏览

这个怎么样:

echo "hello" >> <filename>

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

你也可以用同样的方式使用 printf:

printf "hello" >> <filename>

请注意,使用上述方法可能是危险的。例如,如果您已经有一个文件,您需要追加数据到文件的结尾,您忘记添加最后的 >文件中的所有数据将被销毁。您可以通过在 .bashrc中设置 noclobber变量来改变这种行为:

set -o noclobber

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

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

echo "hello" >| <filename>

您还应该知道,在默认情况下,echo添加了一个可以通过使用 -n标志来抑制的新行字符:

echo -n "hello" >> <filename>

参考文献

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

实际上,您可以将任何想要的文本转储到文件中。CTRL-D 发送一个文件结束信号,该信号终止输入并将您返回到 shell。

另一种可能的方法是:

echo "text" | tee -a filename >/dev/null

-a将附加在文件的末尾。

如果需要 sudo,使用:

echo "text" | sudo tee -a filename >/dev/null

跟进已接受的答复。

你需要的不仅仅是 CTRL-D 用于指定在脚本中使用此属性时的结束,试试这个:

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

这将附加文本到指定的文件(不包括“ EOF”)。

它利用了 本文件(或本文件)

但是,如果您需要 sudo 来附加到指定的文件,那么如果您直接在命令行上键入,那么由于 I/O 重定向,您将在使用 herdoc 时遇到麻烦。

当您直接在命令行上键入以下内容时,此变体将会起作用:

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

或者您可以使用 tee来代替,以避免在对 cat 使用 heredoc 时出现的命令行 sudo 问题:

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