美文网首页
Linux xargs grep zgrep命令

Linux xargs grep zgrep命令

作者: 生信交流平台 | 来源:发表于2020-12-20 21:04 被阅读0次

    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文件)找特定的内容该怎么做呢?大家应该能触类旁通,举一反三了吧!

    Linux xargs grep zgrep命令​

    相关文章

      网友评论

          本文标题:Linux xargs grep zgrep命令

          本文链接:https://www.haomeiwen.com/subject/mhtlnktx.html