如何用tee和grep实现管道输出写入文件且终端显示完整内容
解决方法:同时输出完整内容到终端并将匹配结果写入文件
要实现终端显示未过滤的完整输出,同时把grep匹配的内容写入文件,你可以借助bash的进程替换结合tee命令来完成,这比临时文件中转要高效得多。
最终可用命令
cat file | tee >(grep 'aaa' >> any.txt)
具体解释
tee命令的核心作用是读取输入,同时将内容输出到标准输出(也就是你的终端)和指定的文件/进程。这里我们用>(...)这种bash特有的进程替换语法,让tee把一份输出传给括号里的grep命令处理。- 括号内的
grep 'aaa' >> any.txt会接收tee传过来的完整内容,过滤出包含aaa的行,然后追加写入any.txt文件。 - 与此同时,
tee会把原始的完整内容直接输出到终端,完全符合你的需求:终端显示aaa bbb ccc这类完整行,any.txt里只保留匹配aaa的行。
备选方案(兼容非bash shell)
如果你的系统用的不是bash(比如sh),进程替换可能不支持,这时候可以用临时文件中转的方式实现:
# 先把完整内容写入临时文件 cat file > temp_full.txt # 显示完整内容到终端 cat temp_full.txt # 过滤匹配内容写入目标文件 grep 'aaa' temp_full.txt >> any.txt # 删除临时文件 rm temp_full.txt
不过这种方法需要创建临时文件,效率稍低,优先推荐第一种bash兼容的方法。
内容的提问来源于stack exchange,提问作者Ja Bush
相关产品推荐
相关产品推荐

