• 正则表达式


    正则表达式是通过正则表达式引擎实现的,linux有2种流行的正则表达式引擎:

    1.POSIX基本正则表达式(BRE)引擎

    2.POSIX扩展正则表达式(ERE)引擎

    大多数linux工具都至少符合POSIX BRE引擎规范,有些工具,如sed只实施了BRE的子集,gawk使用ERE引擎来。

    BRE模式

    1.纯文本

     支持文本,且 区分大小写、支持空格。

    2.特殊字符

    可识别^、$等特殊字符,如果要单独使用,需要在前面加进行转义。

    #echo 'The cost is $4.00' | sed -n '/$/p' 

    The cost is $4.00

    备注:/不是特殊字符,但在sed或gawk中使用时需要转义

    #echo "3 / 2" | sed -n '///p'

    3 / 2

    3.锚字符

       ^ :锚定行首,此字符后面的字符必须出现在行首

      $:锚定行尾,此字符前面的字符必须出现在行尾

     或<:锚定词首,此字符后面的字符必须作为单词开始

    或>:锚定词尾,此字符前面的字符必须作为单词结束

    #匹配以Book开始的行
    # echo "Books are great" | sed -n '/^Book/p' 
    Books are great
    
    组合锚定:
    1.匹配特定的行
    #sed '^this is a test$'
    2.删除文件空白行
    #sed '/$^/d' testfile

    #匹配以w开头的单词
    #echo 'hello world, hello beijing.' | sed -n '/<w/'
    hello world, hello beijing.

    3.点字符:.号

    匹配任意单个字符(包括空格),除换行符

    #echo 'this is a cat'  | sed -n ‘/.at/p’

    this is a cat

    4.星号:*

    匹配前1字符任意次,包括0次

    #echo 'ik' | sed -n '/ie*k/p'
    ik
    #echo 'iek' | sed -n '/ie*k/p'
    iek
    #echo 'iek' | sed -n '/ie*k/p'
    ieek
    1.用于不同语言拼写差异,如:美式英语、英式英语的colour和color表示同一意思
    #echo 'I'm getting a color TV' | sed -n '/colou*r/p'
    I'm geting a color TV
    #echo 'I'm getting a colour TV' | sed -n '/colou*r/p'
    I'm geting a colour TV
    
    2.点号与星号连用,0到多个任意字符
    #echo 'You are a boy.' | sed -n '/You.*boy/p'
    You are a boy.
    #echo 'Youboy' | sed -n '/You.*boy/'p
    Youboy
    
    3.星号和字符组组合,指定文本中出现多个的一组字符或一个字符区间
    #echo 'bt'  | sed -n '/b[ae]*t/p'
    bt
    #echo "bat" | sed -n '/b[ae]t/p'
    bat
    #echo "baakkt" | sed -n '/b[ae]t/p'  #出现的kk非字符组中的字符,所以不匹配。

    5.字符组:[]

        []:匹配[]中的任意字符

           [acd157]  匹配a、c、d、1、5、7的任意一个

           [a-ch-m]  匹配a到c、h到m之间的任意一个(指定多个区间)

           [0-3]       匹配0-3(指定单个区间)

       [^]:匹配[]中的任意字符外的其他字符

             [^a-b]  #匹配除a-b之外其特所有单个字符

      特殊字符:

       [:alpha:]   匹配任意字母,即A-Z和a-z

       [:lower:]   匹配任意小写字母

       [:upper:] 匹配任意大写字母

       [:alnum:]  匹配任意字母和数字,即0-9、A-Z、a-z

       [:digit:]   匹配0-9数字

       [:space:] 匹配任意空白字符:空格、制表符、NL、FF、VT和CR

       [:blank:] 匹配空格或制表符

       [:print:] 匹配任意可打印字符

       [:punct:] 匹配标点符号

        这些特殊字符在字符组中,表现为:[[:digit:]]

    典型案例:
    1.不清楚字符大小写时用
    #echo "yes"  | sed -n '[Yy]es'
    yes
    #echo "Yes"  | sed -n '[Yy]es'
    Yes
    
    2.多个字符组连用(多个字符都不知道大小写)
    #echo "yEs"  | sed -n '[Yy][Ee][Ss]'
    yEs
    
    3.匹配任意数字
    #echo "abc123" | sed  -n '/[[:digit:]]/p'
    abc123

    5.聚合表达式:()

     ()中的内容必须匹配

    #echo "start"  |  sed -n '/st(art)/p'

    start

    备注:BRE使用聚合分组时,需要对园括号进行转义

    聚合组引用:

    1:引用第1个聚合组

    2:引用第2个聚合组

    #echo "start abc start" | sed '/st(art) abc st1/p' 

    start abc start

    备注:

          BRE也支持ERE的?、+、|、{}用法,只是需要使用反斜杠进行转义

    ERE模式

    ERE支持BRE的所有内容,新增如下内容:

    1.问号

    匹配前1字符0次或1次

    #echo 'bet' | gawk '/be?t/{print $0}'    #echo bt也可匹配,echo beet则不会被匹配
    
    bet
    
    问号与字符组一起使用
    
    #echo 'bat'  | gawk '/b[ae]?t/{print $0}'  #表示问号前的字符组中任意字符出现0-1次
    
    bat   

    2.加号

       匹配前一字符1次或多次,至少1次。

    #echo ‘bet’  | gawk '/be+t/{print $0}'    #bt不匹配,beet匹配

    bet

    3.花括号:{}
      指定前1字符出现的次数

      {m,}  #前1字符至少出现m次

      {m}  #前1字符只出现m次

      {m,n} #前1字符至少出现m次,最多出现n次

    示例:
    
    1.grep
    #echo ''beeet" | grep -E 'be{3}t'
    2.gawk
    #echo "beeet" | gawk --re-interval '/be{1,3}t/{print $0}' #gawk要支持{},需要--re-interval
    

    4.管道符:|

      多个模式之间使用|,任何一个模式匹配则匹配成功

    #echo "The cat is asleep"  | gawk '/dog|cat/{print $0}'
    
    The cat is asleep
    
    #echo "The dog is asleep" | gawk '/dog|cat/{print $0}'
    
    The dog is asleep
    

    5.聚合表达式

       参见BRE,只是不需要对圆括号进行转义。

      

      

      

    111
  • 相关阅读:
    获取设备和 App 信息
    使用 UICollectionView 实现网格化视图效果
    UIImage 读取图片内存优化
    使用 stretchableImageWithLeftCapWidth 方法实现可伸缩图片
    使用 StoryBoard 实现左右按钮切换图片的浏览效果
    二维码图片生成(扩展知识:创建带圆角效果的图片)
    Objective-C语法之扩展(Extension)的使用
    Objective-C语法之字符串NSString去掉前后空格或回车符(可以是NSCharacterSet类型的其它字符)
    Objective-C语法之可变参数
    什么时候layoutSubview会被调用
  • 原文地址:https://www.cnblogs.com/zmdsg/p/7070265.html
Copyright © 2020-2023  润新知