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


Answers:


665

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

your_command >> file_to_append_to

如果file_to_append_to不存在,将创建它。

例:

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

4
问题是echo从字符串中删除换行符。如何将包含换行符的字符串追加到文件中?
蒂莫西·斯旺

5
@TimothySwan,我相信带有-e选项。
ValentinGrégoire'18

echo不会从字符串中删除换行符。如果您无法正确引用该参数,那么外壳程序将拆分字符串并将参数传递给echo,而echo甚至不会看到换行符。
威廉·珀塞尔

105

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


74

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

要测试此尝试运行:

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

这样做几次,然后运行:

cat textfile.txt

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


40

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

例如 echo "Hello" >> testFile.txt

注意:如果仅使用一个>文件,则将覆盖文件的内容。为确保永远不会发生,您可以将添加set -o noclobber到中.bashrc

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

因此,当您使用>它时,将仅允许您创建一个新文件,而不会覆盖现有文件。



21

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

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

这个线程对tee有很好的答案


2
这是用新行追加内容的最佳方法。
M_R_K

2
一直在寻找一种方法来附加到受保护的文件并解决了这一问题
Woootiness

14

对于整个问题:

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

11

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

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

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

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

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

7

我建议您做两件事:

  1. 使用>>你的shell脚本追加内容特定的文件。文件名可以是固定的,也可以使用某些模式。
  2. 设置每小时的cronjob来触发Shell脚本

7

例如,您的文件包含:

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

如果您想在文件末尾附加->请记住'text'>>'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

1
这在许多细节上都是误导性的。空间并不重要,将空输出传递到管道cat中……只是完全古怪。(这是空的,因为您只是将标准输出重定向到文件。)
Tripleee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.