如何将文本附加到文件?

时间:2013-07-17 14:06:26

标签: linux file text file-io append

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

我看了at this question,但接受的答案使用了一个额外的程序(sed)我确信应该有一个更简单的echo或类似方式。

4 个答案:

答案 0 :(得分:146)

怎么样:

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>

<强>参考

答案 1 :(得分:113)

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。

答案 2 :(得分:21)

其他可能的方式是:

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

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

如果需要sudo,请使用:

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

答案 3 :(得分:8)

跟进接受的答案。

您需要CTRL-D to designate the end if using this in a script之外的其他内容。试试这个:

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

这会将文字附加到所述文件(不包括&#34; EOF和#34;)。

它使用here document (or heredoc)

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

当您直接在命令行上输入时,此变体将起作用:

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