在 Linux 中,将文本附加到文件的最简单方法是什么?
我有一个看看 在这个问题上,但接受的答案使用一个额外的程序(sed) ,我相信应该有一个更容易的方式与 echo或类似。
sed
echo
这个怎么样:
echo "hello" >> <filename>
使用 >>操作符将在文件末尾追加数据,而使用 >将覆盖文件的内容(如果已经存在)。
>>
>
你也可以用同样的方式使用 printf:
printf
printf "hello" >> <filename>
请注意,使用上述方法可能是危险的。例如,如果您已经有一个文件,您需要追加数据到文件的结尾,您忘记添加最后的 >文件中的所有数据将被销毁。您可以通过在 .bashrc中设置 noclobber变量来改变这种行为:
.bashrc
noclobber
set -o noclobber
现在,当你尝试做 echo "hello" > file.txt你会得到一个警告说 cannot overwrite existing file。
echo "hello" > file.txt
cannot overwrite existing file
要强制写入文件,现在必须使用特殊语法:
echo "hello" >| <filename>
您还应该知道,在默认情况下,echo添加了一个可以通过使用 -n标志来抑制的新行字符:
-n
echo -n "hello" >> <filename>
参考文献
echo(1) - Linux man page
noclobber variable
I/O Redirection
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将附加在文件的末尾。
-a
如果需要 sudo,使用:
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
tee -a filename << EOF This is text entered via the keyboard or via a script. EOF