lor*_*o-s 26 grep pipe tee stdout
我有一个将文本输出到stdout. 我想在我的终端中看到所有这些输出,同时我想过滤一些行并将它们保存在一个文件中。例子:
$ myscript
Line A
Line B
Line C
$ myscript | grep -P 'A|C' > out.file
$ cat out.file
Line A
Line C
Run Code Online (Sandbox Code Playgroud)
我想在终端中查看第一个命令的输出,并将第二个命令的输出保存在一个文件中。同时。我尝试使用tee,但没有结果,或者更好,结果相反。
gol*_*cks 39
我想在终端中查看第一个命令的输出,并将第二个命令的输出保存在一个文件中。
只要您不在乎所查看的内容是来自stdout还是stderr,您仍然可以使用tee:
myscript | tee /dev/stderr | grep -P 'A|C' > out.file
Run Code Online (Sandbox Code Playgroud)
将在 linux 上工作;我不知道“/dev/stderr”是否同样适用于其他 *nix。
Sté*_*las 10
{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1
Run Code Online (Sandbox Code Playgroud)
或者使用进程替换(ksh93、zsh 或 bash):
... | tee >(grep -e A -e C > out.file)
Run Code Online (Sandbox Code Playgroud)
使用 zsh:
... >&1 > >(grep -e A -e C > out.file)
Run Code Online (Sandbox Code Playgroud)
这是另一种方式sed:
myscript | sed '/PATTERN/w out.file'
Run Code Online (Sandbox Code Playgroud)
默认情况下,sed打印每一行,因此在这种情况下,stdout将与stdin相同(即您将myscript在屏幕上看到整个输出)。
此外,所有匹配的PATTERN行将被w写入out.file