zoukankan      html  css  js  c++  java
  • 文本搜索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...

  • 相关阅读:
    Maximum Flow Exhaustion of Paths Algorithm
    ubuntu下安装java环境
    visualbox使用(二)
    vxworks一个超级奇怪的错误(parse error before `char')
    February 4th, 2018 Week 6th Sunday
    February 3rd, 2018 Week 5th Saturday
    February 2nd, 2018 Week 5th Friday
    February 1st, 2018 Week 5th Thursday
    January 31st, 2018 Week 05th Wednesday
    January 30th, 2018 Week 05th Tuesday
  • 原文地址:https://www.cnblogs.com/yajing-zh/p/4878272.html
Copyright © 2011-2022 走看看