在Linux中将文本附加到文件的最简单方法是什么?
我看了at this question,但接受的答案使用了一个额外的程序(sed
)我确信应该有一个更简单的echo
或类似方式。
答案 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