• 正则表达式


    基本正则表达式

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

    1、字符匹配

    • .:任意字符
    • []:匹配指定范围内的单个字符
    • [^]:匹配指定范围外的单个字符
    • [:alnum:] 字母和数字
    • [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
    • [:lower:] 小写字母 [:upper:] 大写字母
    • [:blank:] 空白字符(空格和制表符)
    • [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
    • [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
    • [:digit:] 十进制数字 [:xdigit:]十六进制数字
    • [:graph:] 可打印的非空白字符
    • [:print:] 可打印字符
    • [:punct:] 标点符号

    2、匹配次数

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

    • *:匹配前边的字符任意次
    • .*:匹配任意字符任意次,表示所有
    • ?:匹配前边字符0或一次,表示前边字符可有可无
    • {m}:匹配前边字符m次
    • {m,n}:匹配前边字符最少m次,最多n次
    • {,n}:匹配前边字符至多n次,{m,}:匹配前边字符至少m次

    3、位置锚定

    • ^:行首锚定,用于模式的最左侧
    • $:行尾锚定,用于模式的最右侧
    • ^PATTERN$:用于模式匹配整行<或:单词锚定,用于单词模式的左侧
    • ^$:匹配空行
    • ^[[:space:]]*$:匹配空白行
    • >或:单词锚定,用于单词模式的右侧
    • <PATTERN>:匹配整个单词
    • () 分组:将多个字符捆绑一起当做一个字符用
      习题
      1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
          # cat /proc/meminfo |grep -i "^s"
          # cat /proc/meminfo |grep "^(s|S)"
      2、显示/etc/passwd文件中不以/bin/bash结尾的行
          # grep -v "/bin/bash$" /etc/passwd
      3、显示用户rpc默认的shell程序
          # getent passwd rpc |grep -o "/[s]?bin/.*"
      4、找出/etc/passwd中的两位或三位数
          # getent passwd |grep -o "[[:digit:]]{2,3}"
      5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
          # cat /etc/grub2.cfg |grep "^[[:space:]]+" |grep -v "^[[:space:]]*$"
      6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
          # netstat -tan |grep "ESTABLISHED"
      7、显示CentOS7上所有系统用户的用户名和UID
          # getent passwd |cut -d: -f1,3
      8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
          # getent passwd |grep "^(<[[:alnum:]]*).*/1$"
      9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
          df |grep "sd[a-z]" |grep -o "[0-9]{1,3}%" |grep -o '[[:digit:]]*'

      扩展的正则表达式

       正则表达式与扩展正则表达式类似,只是扩展正则表达式表达更加简单。

      正则表达式需要打 转义字符 来表示某些字符的意思,而扩展正则表达式则不需要:

      • {m} 正则表达式表示至少表示前面的字符m次                      {m}            
      • ? 正则表达式表示前面的字符0或1次                           ?          
      • + 正则表达式表示前面的字符至少一次                          +
      • () 正则表达式表示分组                                  ()            
      • | 正则表达式表示或                                     | 
        练习:
        1
        显示Centos7的/etc/grep2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行 cat /etc/grub2.cfg | grep "^[[:space:]]+[^[:space:]]" 2 找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行 netstat -tan |grep "LISTEN[[:space:]]+$" 3 显示Centos7上所有系统用户的用户名和UID cat /etc/passwd |cut -d: -f1,3 |grep "<[0-9]{1,3}>" 4 显示三个用户root,mage,wang的UID和默认的shell cat /etc/passwd |egrep "^(root|yuan|gentoo)" | cut -d: -f3,7 5 找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行 cat /etc/rc.d/init.d/functions |egrep "^[_[:alnum:]]+()" 6 使用egrep取出/etc/rc.d/init.d/functions中其基名 echo /etc/tc.d/init.d/functions |egrep -o "[^/]+$" 7 使用egrep取出上面路径的目录名 echo /etc/tc.d/init.d/functions | egrep -o ".*/" 8 统计last命令中以root登录的每个主机IP地址登录次数 last |grep "^root>" |egrep -o "([[:digit:]]{1,3}.){3}[[:digit:]]{1,3}" |sort |unip -c |sort -nr 9 利用扩展正则表达式分别表示0-910-99100-199200-249250-255 [0-9] [0-9][0-9] 1[0-9]{2} 2[0-4][0-9] 25[0-5]
            
         
  • 相关阅读:
    Focal loss and weighted loss学习记录
    学习记录之Focal loss
    caffe学习记录(八) shufflenet学习记录
    caffe学习记录(七) Windows下基于Inter训练的核心加速技术,MKL
    caffe学习记录(六) MobileNet fine tune
    caffe学习记录(五) SSD训练+SSDpelee测试
    caffe学习记录(四) solver
    caffe学习记录(三) Blob,layer Net, solver配置文件的编写
    caffe学习记录(二)
    HTML meta viewport属性说明
  • 原文地址:https://www.cnblogs.com/yaun1498078591/p/8817955.html
Copyright © 2020-2023  润新知