我有一个命令,它将产生大量输出到STDOUT,我知道它可以以这样的方式重定向到一个文件中:
./myCMD 1>tmp
如何在将输出重定向到文件之前对其进行过滤。例如,我只想重定向包含一些关键字的输出行。
发布于 2018-03-07 02:34:04
如果您的意思是只想让一些行转到tmp
文件中,而其余的行则保持不变:
cmd | awk '/pattern/ {print > "tmp"; next}
{print}'
或者:
cmd | sed '/pattern/!b
w tmp
d'
(单行:cmd | sed -e '/pattern/!b' -e 'w tmp' -e d
)
或者:
cmd | sed '/pattern/ {
w tmp
d
}'
(单行:cmd | sed -e '/pattern/{w tmp' -e 'd;}'
)
注意,对于sed
,pattern
是一个基本的正则表达式,而对于awk
,它是一个扩展的正则表达式。
发布于 2018-03-07 01:08:17
你可以用管道做这件事:
./myCMD | grep keyword > tmp
这只会将包含“关键字”的行写入tmp
文件。
如果您希望看到完整的输出,但只记录到一个文件的子集,那么添加tee
(假设您的shell支持进程替换):
./myCMD | tee >(grep keyword > tmp)
https://unix.stackexchange.com/questions/428695
复制相似问题