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

vin*_*ncy 419 bash shell

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

aio*_*obe 599

使用>>而不是>在将输出定向到文件时:

your_command >> file_to_append_to
Run Code Online (Sandbox Code Playgroud)

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

例:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
Run Code Online (Sandbox Code Playgroud)

  • @TimothySwan,我相信-e选项. (5认同)
  • 问题是`echo`从字符串中删除换行符.如何将包含换行符的字符串附加到文件? (3认同)
  • echo 不会从字符串中删除换行符。如果您未能正确引用参数,那么 shell 将分割字符串并将参数传递给 echo,而 echo 甚至不会看到换行符。 (2认同)

yoc*_*com 78

append文件使用 >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt
Run Code Online (Sandbox Code Playgroud)

那么输出应该是

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva
Run Code Online (Sandbox Code Playgroud)

overwrite文件使用 >

echo "hello tom" > read.txt
cat read.txt  
Run Code Online (Sandbox Code Playgroud)

那么输出就是

hello tom


wal*_*lta 73

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

要测试此尝试运行:

echo "Hi this is a test" >> textfile.txt
Run Code Online (Sandbox Code Playgroud)

这样做几次然后运行:

cat textfile.txt
Run Code Online (Sandbox Code Playgroud)

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


cra*_*aft 30

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

例如 echo "Hello" >> testFile.txt

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

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

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


Nev*_*kes 22

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


jm6*_*666 14

对于整个问题:

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

这会将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
Run Code Online (Sandbox Code Playgroud)


Sau*_*ahu 11

我经常把两者混淆。最好通过他们的输出记住:

> 用于覆盖

$ touch someFile.txt
$ echo ">" > someFile.txt
$ cat someFile.txt
  >
$ echo ">" > someFile.txt
$ cat someFile.txt
  >
Run Code Online (Sandbox Code Playgroud)

>> 用于追加

$ echo ">" > someFile.txt
$ cat someFile.txt
  >
$ echo ">" >> someFile.txt
$ cat someFile.txt
  >>
Run Code Online (Sandbox Code Playgroud)


vic*_*rtv 10

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

echo "hello world" | sudo tee -a output.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 正在寻找一种附加到受保护文件的方法,这解决了这个问题 (4认同)
  • 这是添加新行的最佳方式。 (3认同)

Bra*_*olt 8

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

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

printf "hello world"  >> read.txt   
cat read.txt
hello world
Run Code Online (Sandbox Code Playgroud)

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

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world
Run Code Online (Sandbox Code Playgroud)


小智 7

我建议你做两件事:

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


Man*_*kar 7

例如,您的文件包含:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF
Run Code Online (Sandbox Code Playgroud)

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

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append
Run Code Online (Sandbox Code Playgroud)

并覆盖文件的内容:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write
Run Code Online (Sandbox Code Playgroud)


Eng*_*hly 5

在Linux中,您可以使用cat命令将文件内容附加到另一个文件

cat fileName_1.txt >> fileName_2.txt

在上一个命令中,您将附加fileName_1.txtto的内容fileName_2.txt

在Windows操作系统中,您可以使用type命令

type fileName_1.txt >> fileName_2.txt

请看这个 gif 图片:

在此输入图像描述