将输出定向到文件时使用 >>
而不是 >
:
your_command >> file_to_append_to
如果 file_to_append_to
不存在,它将被创建。
例子:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
要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
您可以使用 >> 运算符。这会将命令中的数据附加到文本文件的末尾。
要测试这个尝试运行:
echo "Hi this is a test" >> textfile.txt
这样做几次,然后运行:
cat textfile.txt
您会看到您的文本已多次附加到 textfile.txt 文件中。
使用 command >> file_to_append_to
追加到文件。
例如 echo "Hello" >> testFile.txt
注意:如果您只使用一个 >
,您将覆盖文件的内容。为确保永远不会发生这种情况,您可以将 set -o noclobber
添加到您的 .bashrc
。
这样可以确保如果您不小心将 command > file_to_append_to
键入到现有文件中,它会提醒您该文件已经存在。示例错误消息:file exists: testFile.txt
因此,当您使用 >
时,它只允许您创建一个新文件,而不是覆盖现有文件。
将 tee 与选项 -a (--append) 一起使用可以让您一次附加到多个文件,也可以使用 sudo(在附加到受保护的文件时非常有用)。除此之外,如果您需要使用 bash 之外的其他 shell,这很有趣,因为并非所有 shell 都支持 > 和 >> 运算符
echo "hello world" | sudo tee -a output.txt
这个 thread 对 tee 有很好的回答
使用 >>
运算符将文本附加到文件中。
我经常混淆这两者。通过他们的输出更好地记住:
> 用于覆盖
$ 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
>>
对于整个问题:
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
我会使用 printf 而不是 echo 因为它是 more reliable 并正确处理新行 \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
我建议你做两件事:
在您的 shell 脚本中使用 >> 将内容附加到特定文件。文件名可以固定或使用某种模式。设置每小时 cronjob 来触发 shell 脚本
例如,您的文件包含:
1. mangesh@001:~$ cat output.txt
1
2
EOF
如果你想在文件末尾追加,那么---->记住“文本”>>“文件名”之间的空格
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
cat
是……完全古怪。 (它是空的,因为您刚刚将标准输出重定向到一个文件。)
虽然所有这些答案在技术上都是正确的,通常使用 >>
附加到文件是可行的方法,但请注意,如果您在循环中使用它,例如解析/处理文件并将每一行附加到结果文件,这可能比您预期的要慢得多。
一个更快的选择可能是这样的:
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
警告:您正在将所有行读入内存;内存是有限的资源,所以不要为巨大的文件这样做。
不定期副业成功案例分享
echo
从字符串中删除了换行符。如何将包含换行符的字符串附加到文件中?echo
不能扩展转义序列。改用printf
echo
不是 solution 的一部分,它只是我输入的 example 的一部分,并且示例中没有转义序列。