前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux xargs grep zgrep命令

Linux xargs grep zgrep命令

作者头像
生信交流平台
发布2020-08-06 11:10:33
3.6K0
发布2020-08-06 11:10:33
举报

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具,它能够捕获一个命令的输出,然后传递给另外一个命令。之所以会用到这个命令,关键是由于很多命令不支持管道来传递参数,而日常工作中就有这个需要,所以就有了 xargs 命令。

我们经常会用grep命令在文件中查找需要的内容,比如现在一个文件夹里面有9个文件,有三种格式txt, csv和gz压缩文件。

123里面存的内容都一样为

456里面存的内容也一样为

789里面存的都是

如果我现在要从所有的文件里面找“apple”

 grep "apple" *

我会得到下面的结果,你会发现grep不能从gz文件中查找内容

123.csv:apple
123.txt:apple
456.csv:apple
456.txt:apple
789.csv:apple
789.txt:apple

zgrep这个命令可以解决这个问题,这样就不需要先解压然后再去查找了

#-n 显示找到的行号
zgrep -n "apple" *

会得到如下结果,显示了所有文件格式中找到的“apple”,并且显示了匹配的行号

123.csv:1:apple
123.txt:1:apple
123.txt.gz:1:apple
456.csv:6:apple
456.txt:6:apple
456.txt.gz:6:apple
789.csv:8:apple
789.txt:8:apple
789.txt.gz:8:apple

如果只想在符合某种特征的文件中找你感兴趣的内容呢?比如在文件名中包含123的文件中查找“apple”。这时候就需要管道了,你需要先找到这样的文件然后再从中找“apple”

第一步找到名字中包含123的文件

find ./ -name "123*"

会得到文件名中包含123的所有文件

./123.txt.gz
./123.txt
./123.csv

第二步查找“apple”

然后我们再来从中找“apple”,你会发现下面这条命令不work,你啥都得不到

 find ./ -name "123*" | grep "apple"

这就是我们开篇提到的,很多命令不支持管道来传递参数。这个时候xargs就派上用场了

find ./ -name "123*" | xargs zgrep -n "apple"

同时用上zgrep,这样gz文件也一起找了

./123.txt.gz:1:apple
./123.txt:1:apple
./123.csv:1:apple

那么,如果我们想从某一种特定格式的文件中(比如csv文件)找特定的内容该怎么做呢?大家应该能触类旁通,举一反三了吧!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信交流平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档