echo "hello" | tee test.txt
cat test.txt
sudo sed -e "s|abc|def|g" test.txt | tee test.txt
cat test.txt
输出: 第二个命令和最后一个命令的输出不同,因为命令相同。
问题: 上面脚本中的以下行给出了输出,但是为什么不将其重定向到输出文件?
sudo sed -e "s|abc|def|g" test.txt
答案 0 :(得分:2)
sudo sed -e "s|abc|def|g" test.txt | tee test.txt
在同一命令行中读取和写入test.txt
容易出错。 sed
试图在tee
想要截断并写入文件的同时读取文件。
您可以使用sed -i
修改文件到位。不需要tee
。 (也不需要sudo
。您已创建文件,没有理由要求root用户访问权限来读取它。)
sed -e "s|abc|def|g" -i test.txt
答案 1 :(得分:2)
输入和输出都不应使用相同的文件。
tee test.txt
正在启动时清空输出文件。如果在sed
读取文件之前发生这种情况,sed
将看到一个空文件。由于您运行的是sed
至sudo
,因此可能需要更长的启动时间,因此很有可能。