如何将输出附加到文本文件的末尾

时间:2011-06-01 20:55:59

标签: bash shell

如何将命令的输出附加到文本文件的末尾?

12 个答案:

答案 0 :(得分:524)

将输出定向到文件时使用>>代替>

your_command >> file_to_append_to

如果file_to_append_to不存在,则会创建它。

示例:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

答案 1 :(得分:68)

您可以使用>>运营商。这会将命令中的数据附加到文本文件的末尾。

要测试此尝试运行:

echo "Hi this is a test" >> textfile.txt

这样做几次然后运行:

cat textfile.txt

您将看到您的文本已多次附加到textfile.txt文件中。

答案 2 :(得分:55)

append文件使用>>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt
     

然后输出应该是

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

overwrite文件使用>

echo "hello tom" > read.txt
cat read.txt  
     

然后输出是

     

hello tom

答案 3 :(得分:28)

使用command >> file_to_append_to附加到文件。

例如echo "Hello" >> testFile.txt

注意:如果您只使用一个>,则会完全覆盖该文件的内容。为确保不会发生这种情况,您可以将set -o noclobber添加到.bashrc

这可确保如果您不小心将command > file_to_append_to键入现有文件,它将提醒您该文件已存在。示例错误消息:file exists: testFile.txt

因此,当您使用>时,它只允许您创建新文件,而不是覆盖现有文件。

答案 4 :(得分:20)

使用>>运算符将文本附加到文件中。

答案 5 :(得分:13)

整个问题:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

这会将720行(30 * 24)附加到o.txt中,然后根据当前日期重命名该文件。

每小时运行上面的cron或

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

答案 6 :(得分:7)

我建议你做两件事:

  1. 在shell脚本中使用>>将内容追加到特定文件。文件名可以修复或使用某种模式。
  2. 设置每小时cronjob以触发shell脚本

答案 7 :(得分:7)

例如,您的文件包含:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

如果你想在文件末尾附加,那么----&gt;记住'text'&gt;&gt;之间的空格'filename'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

并覆盖文件的内容:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

答案 8 :(得分:4)

我将使用printf代替echo,因为它是more reliable,并且可以正确处理诸如新行\n之类的格式。

此示例产生的输出类似于先前示例中的echo:

printf "hello world"  >> read.txt   
cat read.txt
hello world

但是,如果在此示例中用echo替换printf,则echo会将\ n视为字符串,从而忽略了意图

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

答案 9 :(得分:3)

使用带有选项 -a(--append) tee ,可以一次添加到多个文件,也可以使用 sudo (在附加到受保护的文件时非常有用)。除此之外,如果您还需要使用除bash之外的其他shell,这很有趣,因为并非所有shell都支持>和>>运算符

echo "hello world" | sudo tee -a output.txt

thread对于tee具有很好的答案

答案 10 :(得分:1)

>覆盖

$ touch someFile.txt
$ echo ">" > someFile.txt
$ cat someFile.txt
  >
$ echo ">" > someFile.txt
$ cat someFile.txt
  >

>>追加

$ echo ">" > someFile.txt
$ cat someFile.txt
  >
$ echo ">" >> someFile.txt
$ cat someFile.txt
  >>

答案 11 :(得分:0)

虽然所有这些答案在技术上都是正确的,但使用 >> 附加到文件通常是可行的方法,请注意,如果您在循环中使用它,例如解析/处理文件并附加每一行对于生成的文件,这可能比您预期的要慢得多。

更快的替代方法可能是:

stringBuilder=""
while read -r line; do
  # $'\n' prints a newline so we don't have to know what special chars the string contains
  stringBuilder+="$line"$'\n'
done < "myFile.txt"
echo "$stringBuilder" > $file

警告:您正在将所有行读入内存;内存是一种有限的资源,所以不要对巨大的文件这样做。