• grep


    Grep(Global search REgular expression and Print out the line)搜索以 FILE 命名的文件输入,或者是标准输入,寻找含有与给定的模式 PATTERN 相匹配的内容的行,默认情况下, grep 将把含有匹配内容的行打印出来。

    Grep有两种变种程序,egrep和 fgrep,egrep就相当于 grep -E,fgrep则相当于grep -F

    Synopsis

    grep [optionsPATTERN [FILE...] 
    grep [options] [-e PATTERN | -f FILE] [FILE...]

    选项 Options

    • -A num 打印出紧随匹配的行下文的num行,在相邻的匹配组之间用--分割
    • -B num 打印出匹配行的上文的num行,在相邻的匹配组之间用--分割
    • -C num 打印出匹配行的上文和下文各num行,在相邻的匹配组之间用--分割
    • -b     在输出匹配的行前面打印出当前行在输入文件中的字节偏移量
    • -c    只会打印出匹配行的总数,与-v联用,为不匹配行的总数
    • --color=[color]  匹配周围的颜色标记,color可以是always,nerver,auto
    • -E    扩展的正则表达式
    • -F    将模式PATTERN视为一个固定的字符串的列表,用新行分隔,只要匹配其中之一即可
    • -P    将模式PATTERN视为一个Perl正则表达式
    • -G    将模式PATTERN视为一个基本的这则表达式,这是默认的
    • -f file   从文件file中获取模式,每行算一个模式,空文件0个模式
    • -H    为每个匹配行打印文件名
    • -h    当搜索多个文件的时候,禁止在输出行前面加上文件名
    • -i    忽略模式PATTERN和输入文件中的大小写的分别
    • -a    不要忽略二进制文件
    • -L    禁止通常的匹配输出,它会输出每个不会产生输出的输入文件的名字,它在对文件进行扫描时在遇到第一个匹配时停止
    • -I    (忽略二进制文件)禁止通常的匹配输出,他只会输出每个产生输出的输入文件的名字,它在对文件进行扫描时在遇到第一个匹配时停止
    • -m num 在找到num个匹配行之后,不在读这个这个文件。如果输入是来自一个普通文件的标准输入,并且已经输出了 num个匹配的行, grep 保证标准输入被定位于退出时的最后一次匹配的行之后,不管是否指定了要输出紧随的下文的行。这样可以使一个调用程序恢复搜索。当 grep 在 num个匹配的行之后停止,它会输出任何紧随的下文的行。当使用了 -c 或 --count 选项的时候, grep不会输出比 NUM 更多的行。当指定了 -v 或 --invert-match 选项的时候, grep 会在输出NUM 个不匹配的行之后停止。
    • -n    在输出的每行前面加上它所在文件中的行号
    • -o    只显示匹配行中与PATTERN相匹配的部分
    • -q    安静,不输出任何东西,如果找到任何匹配的内容就会立即意以状态值0退出
    • -R,-r   递归读取目录下的所有文件
    • --include=PATTERN  仅仅在搜索匹配PATTERN的文件时在目录中递归搜索
    • --exclude=PATTERN  在目录中递归搜素,但是跳过匹配PATTERN的文件
    • --exclude-dir=Path   忽律文件夹
    • -V    打印grep版本号
    • -v    取反,只选择不匹配的行

    基本正则表达式的元字符

    • 字符串匹配 

        .------------- 匹配任意单个字符
                []------------- 匹配指定范围内的任意单个字符
                [^]------------- 匹配指定范围内的任意单个字符

                [:lower:]------------- 所有小写字母

                [:upper:]------------- 所有大写字母

                [:alpha:]------------- 所有字母

                [:alnum:]------------- 所有数字和字母

                [:digit:]------------- 所有数字

                [:space:]------------- 所有空白字符

                [:punct:]------------- 所有标点符号

    • 次数匹配

        *------------- 任意次    

                ?------------- 0或1次

                +------------- 1或多次;
                {m}------------- 精确限制为m次
                {m,n}------------- 至少m次,至多n次,[m,n]
                {0,n}------------- 至多n次
                {m,}------------- 至少m次

    • 位置锚定

         ^------------- 行首锚定,用于模式的最左侧
               $------------- 行尾锚定,用于模式的最右侧
               <或者------------- 词首锚定,用于表示单词的模式的左侧
               >或者------------- 词尾锚定,用于表示单词的模式的右侧
               ^$------------- 空白行

    • 分组

        ()

        |

    Fgrep

    就是把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。

    Egrep

    egrep改良了许多传统 grep 不能或不便的操作,如:
    grep 中的?和+要写成?,+, 但 egrep 不用
    grep 不支持a|b或 (abc|xyz) , 但 egrep 则可以
    grep 在处理次数匹配x{n,m} 时, 要用 { 与 } 处理,egrep 则不用
    。。。只知道这么多了,欢迎补充!

     

    实际遇到的问题

    1.在一堆文件中找到包含A但是又不包含B的文件名

    1 grep -lL 'lihongbin' `grep -Pinr 'zhaoyingnan' *|awk -F : '{print $1}'`

    2.匹配ip

    1 grep -PInr "(?<='|/|")[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" --color --include=*.php --exclude-dir=config --exclude-dir=logs
    2 grep -PInr '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}(?=[^).0-9])' * --color --include=*.php --exclude-dir=config --exclude-dir=logs
  • 相关阅读:
    Ubuntu 16.04 LTS安装好之后需要做的15件事
    双目立体视觉
    Win7、Ubuntu双系统正确卸载Ubuntu系统
    推荐一个计算机视觉图书:python计算机视觉编程
    深度学习从被监督走向互动
    详细解读神经网络十大误解,再也不会弄错它的工作原理
    不为人知的springboot的技巧
    并发情况下引发的血案
    slor6.6 在linux下的安装以及启动失败解决办法
    springmvc源码阅读2--dispatcherServlet及谈如何找源码入口
  • 原文地址:https://www.cnblogs.com/yingnan/p/4823230.html
Copyright © 2020-2023  润新知