123

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

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

4

4 回答 4

195

怎么样:

echo "hello" >> <filename>

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

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

printf "hello" >> <filename>

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

set -o noclobber

现在,当您尝试执行此操作时,echo "hello" > file.txt您会收到一条警告消息cannot overwrite existing file

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

echo "hello" >| <filename>

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

echo -n "hello" >> <filename>

参考

于 2013-07-17T14:08:14.627 回答
142
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。

于 2013-07-17T14:11:50.680 回答
25

其他可能的方式是:

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

-a附加在文件末尾。

如果需要sudo,请使用:

echo "text" | sudo tee -a filename >/dev/null
于 2015-06-10T16:01:58.900 回答
18

跟进接受的答案。

如果在脚本中使用它,则需要 CTRL-D 以外的其他东西来指定结束。试试这个:

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

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

它使用了一个here 文档(或 heredoc)

但是,如果您需要 sudo 附加到指定的文件,如果您直接在命令行上键入,由于 I/O 重定向,您将在使用 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
于 2017-04-15T07:59:02.243 回答