Linux shell 之grep

一、概念
    grep命令是UNIX中用于文本搜索的大师级工具,它能够接受正则表达式和通配符, 以及通过选项生成各种格式的输出。
二、命令讲解
    <1>基本用法
        (1)从一个文件中搜索一个单词, (数据可以从文件,或stdin获取)

          grep match_pattern filename 或者 grep "match_pattern" filename
          echo "this is a word\n next line" | grep word

            
        (2)同时从多个文件中搜索 

          grep "match_pattern" filename1 filename2 filename3 ......

       

       (3)将搜索的关键字高亮, 结果行中match_pattern将高亮显示

         grep "match_pattern" filename --color

            
        (4)只显示匹配的关键字,结果中每一行结果中只显示了match_pattern

          grep "match_pattern" filename -o

        
        (5)显示不包含match_pattern的其它行

         grep "match_pattern" filename -v


        (6)显示匹配上match_pattern的行数, 一行中多个match_pattern将计为1行

          grep "match_pattern" filename -c

            
        (7)统计匹配上match_pattern的数量

          grep "match_pattern" filename -o | wc -l

        
        (8)显示匹配上match_pattern的行号

          grep "match_pattern" filename -n
          grep "match_pattern" filename1 filename2 -n #显示为 filename:lineNum: 匹配行

            
        (9)显示样式匹配所位于的字符或字节偏移

          grep "match_pattern" filename -b -o

            选项-b 总是和 -o 配合使用
            match_pattern在匹配行的偏移值, 起始值是0
            
        (10)搜索多个文件并找出匹配文本位于哪一个文件中(显示所有包含match_pattern的文件名) 

          grep "match_pattern" filename1 filename2 filename3 ... -l

        
        (11)搜索多个文件并找出不包含match_pattern的文件列表

          grep "match_pattern" filename1 filename2 filename3 ... -L

        
    <2>高级应用
        (1)递归搜索文件

          grep "match_pattern" dir -R

            
        (2)搜索中包括或排查文件
            在dir目录下的搜索.c和.cpp文件,进行match_pattern匹配(使用*.{c}时,结果为空,不知道为什么

          grep "match_pattern" dir -r --include *.{c,cpp}

            在dir目录下搜索除了filename文件

          grep "match_pattern" dir -r --exclude "filename"

            如果需要排除的文件很多,可以将要排除的文件名写入一个文件FILE中,其中每一个文件名占一行

          grep "match_pattern" dir -r --exclude-from FILE

            在dir目录下搜索除了subdir目录下的文件

          grep "match_pattern" dir -r --exclude-dir subdir

            注意: subdir 不要写成subdir/ ,否则将不能排除    
            
        (3)输出'\0'值结束的文件名,并删除, -Z和-l结合使用

          grep "match_pattern" filename -l -Z | args -0 rm

            
        (4)静默模式
            不输出结果,只运行,根据运行返回结果,0 文件包含匹配项, 非0 文件不包含匹配项

           grep "match_pattern" filename -q

            使用 #? 获得运行结果
            
        (5)忽略样式match_pattern的大小写

           grep "match_pattern" filename -i

            
        (6)匹配多个样式

           grep -e "match_pattern1" -e "match_pattern2" -e "match_pattern3"  filename

            如果匹配模式很多,可以将匹配模式写入文件pattern_file中

           grep -f pattern_file  sourcefile

            
        (7)打印出匹配文本之前或之后的行, 有多个匹配是以--作为各匹配的定界符
            [1]打印匹配某个结果之后的4行(4中不包含匹配行)      

           grep "match_pattern" filename -A 4

            [2]打印匹配某个结果之前的5行

           grep  "match_pattern" filename -B 5

            [3]打印出匹配文本之前和之后的3行

           grep "match_pattern" filename -C 3

  三、总结:
            -i                                忽略大小写
            -o                                只输出匹配项
            -c                                只输出匹配行数
            -b 与 -o联用,                    匹配模式在匹配行上的偏移值
            -l                                只输出匹配上的文件名
            -Z 与 -l 联用,                   将匹配上的文件名以'\0'结束输出
            -L                                只输出不匹配的文件名
            -v                                只输出不匹配的行
            -n                                显示行号
            -f pattern_file                   从文件中获得匹配模式
            -q                                静默模式
            -R / -r                           递归搜索
            -A num                            显示匹配行的后num行
            -B num                            显示匹配行的前num行
            -C num                            显示匹配行的前和后num行
            --color                           将匹配项高量显示
            --include file_list               搜索包含的文件列表
            --exclude file_list               排查的文件列表
            --exclude-dir dir_list            排查的文件夹列表
            --exclude-from file               从文件中获得需要排查的文件列表

你可能感兴趣的:(shell,grep)