在 Linux 中将文本附加到文件的最简单方法是什么?
我看了一下这个问题,但接受的答案使用了一个额外的程序(sed
)我相信应该有一个更简单的方法echo
或类似的方法。
怎么样:
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>
参考
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”)。
它使用了一个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