我有一个将文本输出到stdout
.我想在终端中看到所有这些输出,同时我想过滤一些行并将它们保存在文件中。例子:
$ myscript
Line A
Line B
Line C
$ myscript | grep -P 'A|C' > out.file
$ cat out.file
Line A
Line C
我想在终端中查看第一个命令的输出,并将第二个命令的输出保存在文件中。同时。我尝试使用tee
,但没有结果,或者更好,使用结果相反。
答案1
我想在终端中查看第一个命令的输出,并将第二个命令的输出保存在文件中。
只要你不在乎你所看到的是否来自标准输出或者标准错误,您仍然可以使用tee
:
myscript | tee /dev/stderr | grep -P 'A|C' > out.file
将在 Linux 上工作;我不知道“/dev/stderr”是否同样适用于其他 *nix。
答案2
{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1
或者使用进程替换(ksh93、zsh 或 bash):
... | tee >(grep -e A -e C > out.file)
使用 zsh:
... >&1 > >(grep -e A -e C > out.file)
答案3
这是另一种方法sed
:
myscript | sed '/PATTERN/w out.file'
默认情况下,sed
打印它收到的每一行标准输入(这myscript
是标准输出在这种情况下)换句话说,您将myscript
在屏幕上看到整个输出。
此外,所有匹配的行将PATTERN
被w
写入名为的文件中out.file
答案4
您没有指定如何使用 tee 命令,但这应该可以工作:
myscript | grep -P 'A|C' | tee out.file
至少几分钟前它在我的服务器上运行......