zoukankan      html  css  js  c++  java
  • 文本处理工具(grep)

    文本处理工具:
     
      Linux上文本处理三剑客:
           文本过滤工具(模式:pattern)工具;
             1.grep:支持基本正则表达式;
             2.egrep:支持扩展正则表达式
             3.fgrep: 不支持正则表达式
         注:    同时这三个命令通过附加选项可以相互之间进行切换如下
                  grep -E = egrep
                  geep -F = fgrep
                  egrep -G = grep
                  egrp -F = fgrep
                  fgrep -e = egrep
                  fgrep -g = grep
     
    正则表达式:Regual Expression,REGEXP
             
      由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用与表示控制或通配的功能;
               
      同时正则也分两类:
                           基本正则表达式:BRE
                           扩展正则表达式:ERE
    元字符(grep):
          grep: Global search REgular expression and print out the line.
          作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到 行;
          模式 : 由正则表达式的元字符及文本字符所编写出的过滤条件;
    正则表达式引擎:
         grep [options] PATTERN [FILE...]
         grep [options] [-e PATTERN | -f FILE] [FILE...]
       默认形式:    [root@localhost ~]# grep "UUID" /etc/fstab
                           UUID=c16f482c-99e1-4601-a295-895df929ef8e /boot                   xfs     defaults        0 0
    下面是grep的常用选项的简要介绍            
     OPTIONS:
                           --color=auto:对匹配到的文章着色后高亮显示;
                                             -l  :  ignorecase,忽略字符的大小写;
                                             -o : 仅显示匹配到的字符串本身;
                      -v,--invert-match : 显示不能被模式匹配到的行;
                                              -E : 支持使用扩展的正则表达式元字符
                       -q,--qulet,--silent : 静默模式,即不输出任何信息;
                                            -A# : after,后#行
                                           -B# : before,前#行
                                           -C#:context
                         
     基本正则表达式元字符:
                          
      字符匹配:
                                    . : 匹配任意单个字符;
                                  [ ] : 匹配指定范围内的任意单个字符;
                               [^]:匹配指定范围外的任意单个字符;
                                  [:digit:]、[:loewr:]、[:upper:]、[:alpha:]、[:alnum:]
    针对位置锚定可以参考下面实例:
    找出/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行
               [root@localhost ~]# grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
               load_env
               set default="${next_entry}"
               set next_entry=
               save_env next_entry
               ......
     
      匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;
                                   *:匹配其前面的字符任意次;可以是0,也可以1或者n次;
                              例如:grep"x*y"
                                          abxy
                                          aby
                                          xxxxxy
                                          yab
                                  . *  : 匹配任意长度的任意字符
                                   ?  : 匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
                                   + : 匹配前面的字符1次或多次;即前面的字符要出现至少一次
                               {m} : 匹配其前面的字符m次;
                              {m,n} : 匹配其前面的字符至少m次,至多n次;
                              {0,n}: 至多n次
                               {m,} : 至少m次  
        位置锚定:
                       ^:行首锚定:用于模式的最左侧;
                       $:行尾锚定:用于模式的最右侧;
                    ^PATTERN$:用于PATTERN来匹配整行;
                                   ^$ : 空白行;
                    ^[[:space]]*$ : 空行或包含空白字符的行;
                                 单词:非特殊字符组成的连续字符(字符串)都称为单词;
                             <或 : 词首锚定,用于单词模式的左侧;
                             >或 : 词尾锚定,用于单词模式的右侧
      针对位置锚定可以参考下面实例:
       例:找出/etc/passwd文件中不以/bin/bash结尾的行
             [root@localhost ~]# grep -v "/bin/bash$" /etc/passwd |tail
             chrony:x:993:990::/var/lib/chrony:/sbin/nologin  
             ntp:x:38:38::/etc/ntp:/sbin/nologin
             sssd:x:992:989:User for sssd:/:/sbin/nologin
             rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
             nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
             pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
             gdm:x:42:42::/var/lib/gdm:/sbin/nologin
             postfix:x:89:89::/var/spool/postfix:/sbin/nologin
             sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
             tcpdump:x:72:72::/:/sbin/nologin
     
     
      分组及引用
                                   () : 将一个或多个字符捆绑在一起,当作一个整体进处理;
                                         例:(xy)*ab
                            注意:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
                                    1:模式从左侧起,第一个左括号以及与之匹配的有括号之间的模式所匹配到的字符;
                                    2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
                                    3
                                      .......
                                 如下面例子:
                                   [root@localhost ~]# cat love.txt
                                      He loves his lover
                                      He likes his lover
                                      she likes her liker
                                      she loves her liker
      
                                   
                    该例的含义是,行段中左侧出现的以L开头e结尾的单词,后面也要匹配与前面一样的,所以可以把前面(l..e)后面加1并以1结尾,将(l..e)的值赋值给到1。
                                                    
  • 相关阅读:
    【bzoj1036】【ZJOI2008】树的统计
    AE基础(8)PageLayout属性设置和添加元素
    AE基础(7)布局控件与地图控件关联
    UtilityAction扩展
    UtilityAction
    AE基础(6)数据查询与选择
    NavigationAction
    LayerAction
    AE基础(5)鹰眼功能
    AE基础(4)画几何图形
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/6683947.html
Copyright © 2011-2022 走看看