zoukankan      html  css  js  c++  java
  • grep命令

    grep命令非常强大,平时也经常使用grep命令来搜索。这里记录最常用的grep命令

    一.常用的grep命令

    1. grep -w

    grep -w表示匹配一个完整的单词,而不是常用的模糊匹配。比如有如下内容:

    $cat employee.txt
    100  Thomas  Manager    Sales       $5,000
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000
    400  Nisha   Manager    Marketing   $9,500
    500  Randy   Manager    Sales       $6,000 

    grep "Tho"能匹配出第一行,例如:

    $grep "Tho" employee.txt
    100  Thomas  Manager    Sales       $5,000

    但grep -w "Tho" 不能匹配到:

    $grep -w "Tho" employee.txt  

    因为grep -w 是完整单词匹配,而在employee.txt中不存在一个完整的单词"Tho"(存在完整的单词"Thomas"),例如:

    $grep -w "Thomas" employee.txt
    100  Thomas  Manager    Sales       $5,000
    

    有时我们想精确匹配,那么grep -w就派上用场了.

     

    2. grep -v

    有这样的场景:过滤出除了包含某某关键字的其他所有行 ,这时就可以用grep -v了.

    过滤出不包含"Manager"的行,结果如下:

    $grep -v "Manager" employee.txt
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000

    3. grep -e

    如果想在一行命令中过滤出多个关键字,即过滤出包含关键A, 或者包含关键字B这样的场景时,就可以使用grep -e.

    例如,过滤出包含"Tech"的行,或者包含"Sales"的行,则命令如下:

    $grep -e "Tech" -e "Sales" employee.txt
    100  Thomas  Manager    Sales       $5,000
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000
    500  Randy   Manager    Sales       $6,000
    

    4. grep -E

    grep -E可以使用正则表达式来过滤出你想要的内容。

    使用grep -E时,如果想匹配多个模式,则使用“|”来分隔。即:

    grep -E "pattern1|pattern2" file
    

    例如,同样实现过滤出包含"Tech"的行,或者包含"Sales"的行的要求,可以使用grep -E来实现:

    $grep -E "Tech|Sales" employee.txt
    100  Thomas  Manager    Sales       $5,000
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000
    500  Randy   Manager    Sales       $6,000
    

      

    5. grep -vxf

    我常用这个命令,来匹配出两个文件的差异:

    grep -vxf file1 file2
    

    查询在file2中的行,但不在file1中的行,就是file2比file1多出来的行。

    6. grep -A、grep -C、 grep -B

    有时排查线上问题时,我们能扎到异常日志,但如果要知道问题,还要看上下文日志,这时就可以使用grep -A, -B, -C了

    grep -A 10 将关键字所在行的后10行也打印出来(After)

    grep -B 10 将关键字所在行的前10行打印出来(Before)

    grep -C 10 将关键字所在行的前后10行都打印出来

     

    7. grep -o

    grep -o表示仅输出匹配的内容, 什么意思呢?看下面例子就知道了.

    $grep "Manager" employee.txt
    100  Thomas  Manager    Sales       $5,000
    400  Nisha   Manager    Marketing   $9,500
    500  Randy   Manager    Sales       $6,000
    
    $grep -o "Manager" employee.txt
    Manager
    Manager
    Manager
    

      

    8. grep -i

    grep -i表示忽略大小写。

    $grep "manager" employee.txt
    $grep -i "manager" employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500 500 Randy Manager Sales $6,000

      

    9. grep -f

    grep -f 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式.

    例如,我想查找如下这些人的信息, 人名存在names.txt文件中:

    $cat name.txt
    Thomas
    Jason
    

     现在可以使用grep -f来查找了:

    $grep -f name.txt employee.txt
    100  Thomas  Manager    Sales       $5,000
    200  Jason   Developer  Technology  $5,500
    

     也可以用另外一种方式实现同样的功能:

    $cat name.txt | xargs -I {} grep {} employee.txt
    100  Thomas  Manager    Sales       $5,000
    200  Jason   Developer  Technology  $5,500
    

      

    二.附加命令

    上面都是常用命令. 有时我想要这样的功能:匹配出同时包含多个关键字的内容。grep 也可以实现.

    1. grep and 操作

    使用-E "pattern1.*pattern2"可以实现 and操作,例如:

    $grep -E "Dev.*Tech" employee.txt
    200  Jason   Developer  Technology  $5,500
    

     上面匹配顺序是指定的,如果grep -E "Tech.*Dev"是匹配不出任何内容的。

    如果希望顺序是不固定的,可以这样:

    $grep -E "Dev.*Tech|Tech.*Dev" employee.txt
    200  Jason   Developer  Technology  $5,500
    

      

    2. grep or 操作

    这个其实上面说过了, 

    如果不使用 -E, 则必须转义"|", 即 grep "pattern1|pattern2", 例如:

    $grep "Tech|Dev" employee.txt
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000
    

     

    如果使用-E,则不用使用转义符"", 例如:

    $grep -E "Tech|Dev" employee.txt
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000
    

      

    在常用命令中,我们介绍了-e, 其实使用-e同样可以实现grep or 操作。

    $grep -e "Tech" -e "Dev" employee.txt
    200  Jason   Developer  Technology  $5,500
    300  Raj     Sysadmin   Technology  $7,000
    

      

    3. grep not操作

    grep -v 就可以实现grep not操作,例如:

    $egrep 'Manager|Developer' employee.txt | grep -v Sales
    

      

    参考文章:https://www.jianshu.com/p/4ec50fdaf388

  • 相关阅读:
    spring容器与java访问权限的关系!
    Mybatis初始化过程详解
    Spring-boot 一些常用注解说明!
    JNDI + Spring 如何读取数据
    HashMap,,ConcurrentHashMap------------------浅谈!!
    spring ioc容器和spring mvc 容器--------浅谈!!
    针对xml文件做提取与写入的操作
    vim编辑器显示行号
    ubuntu双系统修复windows引导
    git基本操作
  • 原文地址:https://www.cnblogs.com/NewMan13/p/11142295.html
Copyright © 2011-2022 走看看