如何将文本附加到文件?

Dch*_*ris 100 linux file-io text file append

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

我看了这个问题,但接受的答案使用了一个额外的程序(sed)我确信应该有一个更简单的方法echo或类似的.

Cyc*_*ode 161

怎么样:

echo "hello" >> <filename>
Run Code Online (Sandbox Code Playgroud)

使用>>运算符将在文件末尾附加数据,而使用>将覆盖文件的内容(如果已存在).

您也可以使用printf相同的方式:

printf "hello" >> <filename>
Run Code Online (Sandbox Code Playgroud)

请注意,使用上述内容可能会有危险.例如,如果您已经有一个文件,并且需要将数据附加到文件的末尾,而您忘记添加文件中的最后>所有数据将被销毁.您可以通过在以下位置设置noclobber变量来更改此行为.bashrc:

set -o noclobber
Run Code Online (Sandbox Code Playgroud)

现在,当你尝试做的时候,echo "hello" > file.txt你会收到警告cannot overwrite existing file.

要强制写入文件,您现在必须使用特殊语法:

echo "hello" >| <filename>
Run Code Online (Sandbox Code Playgroud)

您还应该知道默认情况下echo会添加一个尾随的换行符,可以使用该-n标志来抑制该字符:

echo -n "hello" >> <filename>
Run Code Online (Sandbox Code Playgroud)

参考

  • 一般来说,我喜欢这个比使用`cat`的公认答案更多,但你最好小心确保使用`>>`而不是`>`! (3认同)
  • @ sixty4bit - 您可以在`.bashrc`中添加`set -o noclobber`然后在不使用特殊语法`echo"hello"> |的情况下不能覆盖现有文件.<文件名>` (2认同)

Jon*_*sky 120

cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 
^D
Run Code Online (Sandbox Code Playgroud)

基本上,您可以将所需的任何文本转储到文件中.CTRL-D发送一个文件结束信号,终止输入并返回shell.

  • 我不知道猫可以像这样使用!就像写日记条目一样.也不知道ctrl-d做了什么.谢谢! (4认同)
  • 当文件需要root权限时,我该怎么做? (2认同)
  • @UselesssCat什么时候出现"权限被拒绝",我重新检查我正在运行的任何命令,然后使用`sudo !!` - 执行最后一个命令,前面加上`sudo`.我最近发现这也适用于`nano`等(不小心试图'纳米纳米认证'......) (2认同)

use*_*932 22

其他可能的方法是:

echo "text" | tee -a filename >/dev/null
Run Code Online (Sandbox Code Playgroud)

-a将附加在文件的结尾.

如果需要sudo,使用:

echo "text" | sudo tee -a filename >/dev/null
Run Code Online (Sandbox Code Playgroud)


use*_*345 8

跟进接受的答案.

如果在脚本中使用此项,则需要除CTRL-D之外的其他内容来指定结尾.试试这个:

cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Run Code Online (Sandbox Code Playgroud)

这会将文本附加到所述文件(不包括"EOF").

它利用了这里的文件(或heredoc).

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

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

sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Run Code Online (Sandbox Code Playgroud)

或者你可以使用它tee来避免在使用带有cat的heredoc时看到的命令行sudo问题:

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
Run Code Online (Sandbox Code Playgroud)

  • 我多年来一直使用 `cat &lt;&lt; 'EOF' &gt;` 并且不知道 `cat &lt;&lt; 'EOF' &gt;&gt;` 来附加!谢谢 (2认同)