如何将文本追加到文件?
在Linux中向文件添加文本最简单的方法是什么?
我看了这个问题 ,但接受的答案使用了一个额外的程序( sed
)我相信应该有一个更简单的方法与echo
或类似的。
cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn't matter. ^D
实质上,您可以将所需的任何文本转储到文件中。 CTRL-D发送一个文件结束信号,它终止input并返回到shell。
怎么样:
echo "hello" >> <filename>
使用>>
操作符将在文件末尾添加数据,如果已经存在,使用>
会覆盖文件的内容。
你也可以用相同的方式使用printf
:
printf "hello" >> <filename>
请注意,使用上述可能是危险的。 例如,如果您已经有一个文件,并且需要将数据附加到文件的末尾,并且忘记添加最后一个>
文件中的所有数据都将被销毁。 您可以通过在.bashrc
设置noclobber
variables来更改此行为:
set -o noclobber
现在当你尝试echo "hello" > file.txt
你会得到一个警告,说cannot overwrite existing file
。
要强制写入文件,现在必须使用特殊的语法:
echo "hello" >| <filename>
您还应该知道,默认情况下, echo
会添加一个尾随的换行符,可以使用-n
标志来禁止:
echo -n "hello" >> <filename>
参考
-
echo(1) - Linux man page
-
noclobber variable
-
I/O Redirection
其他可能的方法是:
echo "text" | tee -a filename
-a将在文件末尾追加。
跟进接受的答案。
如果在脚本中使用此命令,则需要CTRL-D以外的内容来指定结尾 。 试试这个:
cat << EOF >> filename This is text entered via the keyboard or via a script. EOF
这会将文本追加到规定的文件(不包括“EOF”)。
它利用这里的文件(或heredoc) 。
但是,如果您需要使用sudo来附加到所指定的文件,那么如果您直接在命令行上键入,则由于I / Oredirect而使用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