• 文本搜索grep知识点总结


    文本搜索工具:grep, egrep
        根据用户指定的模式对目标文件进行过滤,显示被模式匹配到的行
        grep [OPTION]... 'PATTERN' FILE...
              --color
       
        难点在于模式如何书写,模式主要是应用正则表达式
        正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,
                    而是表示控制或者统配的功能
            元字符:*, ?等
            两类:
                基本正则表达式
                扩展正则表达式
           
        基本正则表达式:
            字符匹配:
                .: 匹配任意单个字符
                    例如:grep --color 'r..t' /etc/passwd
                            匹配到r开头,t结尾,中间间隔两个字符的行
               
                []:匹配指定集合中任意单个字符
                    [[:digit:]],[0-9]
                    [[:lower:]],[a-z]
                    [[:upper:]],[A-Z]
                    [[:alpha:]],[a-zA-Z]
                    [[:alnum:]],[0-9a-zA-Z]
                    [[:space:]]
                    [[:punct:]]
                    例如:grep --color 'abcd[[:digit:]][[:digit:]][0-9]' test
                            匹配以abcd开头,后边跟三个数字的行
                   
                [^]:匹配指定集合外的任意单个字符           
                        例如:grep --color 'abcd[^[:digit:]]' test
                              grep --color 'abcd[^0-9]' test
                                匹配以abcd开头,后边不是数字的行
           
            匹配次数:用于对其前面紧邻的字符所能够出现的次数作出限定
                *:匹配其前面的字符任意次,0,1或多次
                    例如:grep 'x*y'
                            xy,xxy,xxxy,y
                       
                ?:匹配其前面的字符0次或1次,其中的为转义字符,即转移?
                    例如:grep 'x?y'
                            xy,xxy,y,xxxy,aby 对于xxy而言,确实匹配到了xy,第一个x是被忽略的
               
                +:匹配其前面的字符出现至少一次
                    例如:grep 'x+y'
                            xy,xxy,xxxy
               
                {m}:匹配前面字符m次
                    例如:grep 'x{2}y'
                            xxy,xxxy
               
                {m,n}:匹配其前面字符至少出现m次,至多出现n次
                    例如:grep 'x{2,4}y'
                            xxy, xxxy
                          grep 'x{2,}y'
                            xxy,xxxy
               
                .*:匹配任意长度的任意字符
           
            位置锚定:
                ^: 行首锚定
                    写在模式的最左侧
                    例如:grep --color '^abcd' /etc/passwd
                            匹配以abcd开头的行
                   
                $: 行尾锚定
                    写在模式的最右侧
                    例如:grep --color '[0-9]$' /etc/passwd
                            匹配以数字结尾的行
                   
                ^$:空白行
                    例如:grep --color '^$' /etc/passwd
                            匹配空白行
               
                <: 词首锚定, , 为转义字符
                    出现在要查找的单词模式的左侧,<char
                    例如:grep --color '<r' /etc/passwd
                            匹配以r开头的单词
                   
                >: 词尾锚定, ,为转义字符
                    出现在要查找的单词模式的右侧,char>
                    例如:grep --color 'tor>' /etc/passwd
                            匹配以tor结尾的单词
                   
                <pattern>:匹配单词
                    例如:grep --color '<root>' /etc/passwd
                            匹配单词root
           
            分组:
                ()
                后向引用:模式中,如果使用()实现了分组,在某行文本的检查中,
                        如果()的模式匹配到了某内容,此内容后面的模式中可以被引用;
                    1,2,3
                    模式自左向右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容
                   
                例如:grep --color 'ab{1,}y' test
                        a与y之间至少一次b
                      grep --color '(ab){1,}y' test
                        y之前至少一次ab
                      grep --color '(ab){1,}y1' test
                        y之前至少一次ab,且后边引用第一个分组
                      grep --color '(ab){1,}y2' test
                        y之前至少一次ab,且后边引用第二个分组
                   
        grep选项:
            -v: 反向选取,即显示模式匹配之外的行
                例如:grep -v --color 'abcd' test
                        显示abcd之外的行
            -o: 仅显示匹配到的内容
            -i: 忽略字符大小写
            -n: 匹配的同时显示行号
            -E: 使用扩展正则表达式
            -A #:匹配到的下边#行
                例如:grep -A 2 --color 'abcd' test
                        显示匹配abcd的行及其下边两行,共三行
            -B #:匹配到的上边#行
            -C #:匹配到的上下边#行
       
        egrep及扩展的正则表达式
            扩展正则表达式的元字符
                字符匹配:
                    .
                    []
                    [^]
                   
                匹配次数限定:
                    *
                    ?: 匹配其前面字符0次或1次
                    +:匹配其前面字符至少1次
                    {m}:匹配其前面字符m次
                    {m,n}:{m,},{0,n}
               
                锚定:
                    ^
                    $
                    <, >: 
               
                分组:
                    ()
                    支持后向引用:1, 2...
               
                或者:
                    a|b: a或者b
                    ab|cd:
                    例如: egrep --color 'ab|c' test
                           grep --color 'ab|c' test
                            匹配含有ab或者c的行
                           grep --color 'a(b|c)' test
                            匹配含有ab或者ac的行
                           
            例如:grep -E 'PATTERN' FILE...
                  egrep 'PATTERN' FILE...

  • 相关阅读:
    Qt4的项目在转到Qt5时遇到的问题解决方案链接
    禁止MFC的MDI程序自动创建空白子窗体
    工厂方法(factory method)
    简单工厂模式(Simple Factory)
    单例模式(Singleton Pattern)
    设计模式六大设计原则
    Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题
    原生javascript和jquery实现简单的ajax例子
    MS Sql server 2008 学习笔记
    C#面向对象学习笔记概要
  • 原文地址:https://www.cnblogs.com/yajing-zh/p/4878272.html
Copyright © 2020-2023  润新知