输出到 stdout,同时 grep 到文件中

输出到 stdout,同时 grep 到文件中

我有一个将文本输出到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在屏幕上看到整个输出。
此外,所有匹配的行将PATTERNw写入名为的文件中out.file

答案4

您没有指定如何使用 tee 命令,但这应该可以工作:

myscript | grep -P 'A|C' | tee out.file

至少几分钟前它在我的服务器上运行......

相关内容