linux xargs grep,Linux xargs grep zgrep命令

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

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

daaea8cb8cfb

123里面存的内容都一样为

daaea8cb8cfb

456里面存的内容也一样为

daaea8cb8cfb

789里面存的都是

daaea8cb8cfb

如果我现在要从所有的文件里面找“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文件)找特定的内容该怎么做呢?大家应该能触类旁通,举一反三了吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值