Bash脚本在控制台中显示更改,但不在文件中显示更改|如何保存更改?

Bash脚本在控制台中显示更改,但不在文件中显示更改|如何保存更改?,bash,tac,Bash,Tac,Bash脚本编程新手 我有一个文本文件bar.txt,其中包含以下文本: 123 456 789 我正试图将此逆转为: 987 654 321 我成功地做到了这一点: tac bar.txt | rev 但是,更改不会保存到.txt文件,该文件仍然有1234 如何保存更改,以便更新.txt文件? 抱歉,问题措辞不当或格式错误-Bash脚本和stackoverflow都是新手…与Unix使用shell实用程序作为文本过滤器的理念一样,tac和rev都将其输出传输到标准输出,这就是rev能够对

Bash脚本编程新手

我有一个文本文件bar.txt,其中包含以下文本:

123
456
789
我正试图将此逆转为:

987
654
321
我成功地做到了这一点:

tac bar.txt | rev
但是,更改不会保存到.txt文件,该文件仍然有1234

如何保存更改,以便更新.txt文件?
抱歉,问题措辞不当或格式错误-Bash脚本和stackoverflow都是新手…

与Unix使用shell实用程序作为文本过滤器的理念一样,
tac
rev
都将其输出传输到标准输出,这就是
rev
能够对
tac
的输出进行操作的方式

要“更新文件”,可以将结果输出从
rev
重定向到另一个文件,如下所示

tac bar.txt | rev > foo.txt
您不想将输出重定向到同一个文件的原因是,Unix管道在输入准备就绪时对其进行操作,因此当
rev
的输出准备写入文件时,
foo.txt
可能尚未完全读取

当然,您可以像这样附加输出:

tac bar.txt | rev >> foo.txt
这将追加输出,但实际上不会“更新”文件

如果您想实际“更新文件”,您可以编写一个脚本来处理您的输入,将其传输到一个临时文件,然后使用类似于
mv-f
命令的命令将原始文件替换为新文件

我一直在引号中使用短语“更新文件”的原因是,使用文件的更新内容创建临时文件或内存缓冲区,然后替换原始文件的过程通常是“更新文件”时发生的过程如果您曾经看到过vim创建的带有
~
符号的临时文件,那就是在原始文件被替换之前,或者大多数人称之为“更新”之前,您正在编辑的临时缓冲区

tac bar.txt | rev > bar_rev.txt

要使其显示为文件
bar
已更改,请先将输出写入临时文件-
foo
下方-
mv
之后写入
bar

$ tac bar | rev > foo && mv foo bar
$ cat bar
987
654
321

请不要破坏你的帖子,为别人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下不可撤销的权利,以分发该内容(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅: