zoukankan      html  css  js  c++  java
  • 文本处理三剑客之 grep/egrep

      grep:文本过滤工具 支持BRE
      egrep: 支持ERE
      fgrep: 不支持正则

        作用:根据用户指定的“模式”,对目标文本逐行进行匹配检查,打印匹配到的行
        模式:由正则表达式字符及文本字符所编写的过滤条件
            [OPTIONS] PATTERN [FILE...]
        options:

          -v:显示不被PATTERN匹配的行 排除

    # 显示/etc/passwd文件中不以/bin/bash结尾的行
    
    grep  -v '/bin/bash$' /etc/passwd


          -i:忽略字符大小写
          -n:显示匹配的行号
          -c:显示匹配的行数
          -o:仅显示被匹配的字符串
          -q:静默模式,不输出任何信息
          -A #:after,后#行
          -B #:before,前#行
          -C #:context,前后各#行
          -e:实现多个选择间的逻辑or关系
          -w:整行匹配整个单词
          -E:使用扩展的正则表达式 相当于egrep  
          -F:使用fgrep,不支持正则表达式 相当于fgrep
          --color:将过滤出内容加上颜色显示

    alias grep='grep --color=auto'
     
    [root@centos6 ~ 01:43:05]#grep -i "^s" /proc/meminfo 
    SwapCached: 0 kB
    SwapTotal: 1535996 kB
    SwapFree: 1535996 kB
    Shmem: 228 kB
    Slab: 88064 kB
    SReclaimable: 61960 kB
    SUnreclaim: 26104 kB
    [root@centos6 ~ 01:43:24]#grep "^[sS]" /proc/meminfo

      基本正字表达式BRE:

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

        以下是元字符:
          [:digit:]:数字
          [:lower:]:小写字母
          [:upper:]:大写字母
          [:alpha:]:所有字母
          [:space:]:空白字符
          [:alnum:]:所有字母及数字
          [:punct:]:所有标点符号
          [:graph:]:可打印的非空白字符;
          [:blank:]:水平空白字符(空格和制表符)
          [:cntrl:]:不可打印的控制字符(退格、删除、警铃)
          [:pirnt:]:打印字符
          [:xdigit:]:十六进制数字

    # 显示/etc/grub2.cfg文件中,至少一个空白字符开头的且后面存非空白字符的行
     grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
    
    # 找出“netstat -ant” 命令的结果中以“listen”后跟0,1或多个空白字符结尾的行
    
    netstat -ant |grep "listen[[:space:]]*$"    # 注意,使用元字符时,字符本身的中括号外,还需要加一层中括号
    
    # 添加用户bash,testbash,basher以及nologin,而且找出/etc/passwd 文件中用户名同shell名的行
    useradd bash
    useradd testbash
    useradd basher 
    useradd -s /sbin/nologin login
    grep "^([[:alnum:]]+>).*1$" /etc/passwd

    # 显示/var目录下所有以L开头,以一个小写字母结尾,且中间出现至少以为数字的文件或目录
    
    ls -d /var/L*[0-9]*[[:lower:]]
    
    # 显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
    ls -d /etc/[0-9]*[^0-9]
    ls -d /etc/[[:digit:]]*[^[:digit:]]
    
    # 显示/etc目录下,以非字母开头,后面跟了一个字母及其其他任意长度任意字符的文件或目录
    ls -d /etc/[^[:alpha:]][[:alpha:]]*
     

        次数匹配:

        用在要指定次数的字符后面,用于指定前面的字符要出现的次数

          *:匹配前面的字符任意次
          .*:匹配任意长度的任意字符
          ?:匹配前面的字符0次或1次
          +:匹配前面的字符至少1次,至多不限
          {M}:匹配前面的字符M次
          {M,}:匹配前面的字符至少M次,至多不限
          {M,N}:匹配前面的字符至少M次,至多N次
        

        位置锚定:
          ^:行首锚定,用于模式的最左侧
          $:行尾锚定,用于模式的最右侧
          ^$:空白行,连space也不允许出现
          ^[[:space:]]*$:空白行或包含空白字符的行
          <或:词首锚定,出现在单词的左侧
          >或:词尾锚定,出现在单词的右侧
          <PATTERN>:完整匹配单词

    # 去除nginx.conf里面的的空行和注释行
    
       grep -Ev "^$|#" nginx.conf
      ^$  空行
      |  或者
      #  注释行开头字符

        分组及引用:

          ():将一个或多个字符捆绑在一起,当作一个整体进行处理
          

        后向引用:

          引用前面的分组括号中的模式所匹配的字符

    分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名
        方式为1,2,3
          1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配的字符
          (ab+(xy)*)
          1: ab+(xy)*
          2: xy

      egrep及扩展正则表达式(Extandard RegExp):

        字符匹配:

          .:任意单个字符
          []:指定范围内的任意单个字符
          [^]:指定范围外的任意单个字符

        次数匹配:

          *:任意次
          ?:0次或1次
          +:其前一次最少一次或多次
          {m}:匹配其前字符m次
          {m,n}:匹配其前字符最少m次,最多n次

        位置锚定:
          ^:行首锚定,用于模式的最左侧
          $:行尾锚定,用于模式的最右侧
          ^$:空白行,连space也不允许出现
          <或:词首锚定,出现在单词的左侧
          >或:词尾锚定,出现在单词的右侧
       

        分组及引用:

        ():分组;括号内的模式匹配到的字符会被记录到正则表达式引擎的内部变量中
        后向引用:1,2,3....
        或:
        | a|b a或者b

  • 相关阅读:
    Java static 关键字 静态初始化块
    一致性哈希
    Java函数传递方式值传递
    Scala 小练习
    Scala 推荐递归编程
    白话 Scala 控制抽象
    函数柯里化(curry)
    Scala 闭包 closure
    Scala 参数(类型)推断
    xcode配置文件中,Architectures表示的意义
  • 原文地址:https://www.cnblogs.com/flashfish/p/10722009.html
Copyright © 2011-2022 走看看