首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何过滤和重定向输出

如何过滤和重定向输出
EN

Unix & Linux用户
提问于 2018-03-07 09:06:03
回答 2查看 2.4K关注 0票数 2

我有一个命令,它将产生大量输出到STDOUT,我知道它可以以这样的方式重定向到一个文件中:

代码语言:javascript
代码运行次数:0
运行
复制
./myCMD 1>tmp

如何在将输出重定向到文件之前对其进行过滤。例如,我只想重定向包含一些关键字的输出行。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-03-07 10:34:04

如果您的意思是只想让一些行转到tmp文件中,而其余的行则保持不变:

代码语言:javascript
代码运行次数:0
运行
复制
cmd | awk '/pattern/ {print > "tmp"; next}
           {print}'

或者:

代码语言:javascript
代码运行次数:0
运行
复制
cmd | sed '/pattern/!b
           w tmp
           d'

(单行:cmd | sed -e '/pattern/!b' -e 'w tmp' -e d)

或者:

代码语言:javascript
代码运行次数:0
运行
复制
cmd | sed '/pattern/ {
             w tmp
             d
           }'

(单行:cmd | sed -e '/pattern/{w tmp' -e 'd;}')

注意,对于sedpattern是一个基本的正则表达式,而对于awk,它是一个扩展的正则表达式。

票数 3
EN

Unix & Linux用户

发布于 2018-03-07 09:08:17

你可以用管道做这件事:

代码语言:javascript
代码运行次数:0
运行
复制
./myCMD | grep keyword > tmp

这只会将包含“关键字”的行写入tmp文件。

如果您希望看到完整的输出,但只记录到一个文件的子集,那么添加tee (假设您的shell支持进程替换):

代码语言:javascript
代码运行次数:0
运行
复制
./myCMD | tee >(grep keyword > tmp)
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/428695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档