我如何
STDOUT
同时我试过
cat file | tee | sed 's/abc/def/g' >> log.txt
我在log.txt中获得了所需的过滤输出,但STDOUT
没有任何内容发送到tee
答案 0 :(得分:2)
如果目标是在将过滤后的文件发送到log.txt
时查看终端上的完整文件,请尝试:
cat file | tee /dev/tty | sed 's/abc/def/g' >> log.txt
在这种情况下,tee
会将输出发送到stdout,在这种情况下,它会转到sed
,也会转到您的终端文件/dev/tty
。
或者,如果你有bash或其他高级shell:
cat file | tee >(sed 's/abc/def/g' >> log.txt)
这里,tee
将输出发送到stdout,也发送到命令行中列出的文件。在上面,我们要求bash使用sed
命令创建一个类文件对象。这是使用咒语>(...)
完成的,也称为流程替换。无论哪个发球台写到那个"文件"将显示为sed的stdin,它将处理它并将其发送到log.txt
。另外,tee
将写入stdout,在这种情况下,与上面的第一个命令不同,它是终端。
(我假设您使用cat file
替代更复杂的命令,而不是无用地使用cat
。)
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed 's/abc/def/gw fileChanges' <fileIn >fileOut
这仅将更改写入fileChanges
,将原始文件写入fileOut
(如果不提供文件,则写入stdout)。