zoukankan      html  css  js  c++  java
  • shell正则表达式

    正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串。
    Shell 正则表达式分为两种:
    •  基础正则表达式
    • 扩展正则表达式:扩展的表达式有+、?、| 和()
    1. 正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法
    2. 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
    Linux正则表达式一般以行为单位处理。
     
    正则表达式和通配符有本质区别
    1. 不需要思考的判断方法:在三剑客awk,sed,grep都是正则,其他都是通配符
    2. 区别通配符和正则表达式最简单的方法:
        (1)文件目录名===>通配符
         (2)文件内容(字符串,文本【文件】内容)===>正则表达式
     
    注意:在匹配模式中一定要加上引号
    符号
    描述
                                   实例                                
    .
    匹配任意单个字符(必须存在)
    例子:l..e
    可以表示
    love
    like
    ^
     
    匹配前面字符串开头
     
    匹配以 abc 开头的行:
    echo -e "abc xyz" |grep ^abc
    $
     
    匹配前面字符串结尾
     
    匹配以 xyz 结尾的行:
    echo -e "abc xyz" |grep xyz$
    *
     
    匹配前一个字符的零个或多个
     
    a*  表示出现任意个a的情况
    a*b 表示b前面有任意个a的情况(包括没有a的情况)
    .* 
    表示任意长度的任意字符
    例子:过滤出一行中a在前,b在后的行
    条件:
    包含 a 和 b
    字母 a 必须在 b前面
    # grep --color "a.*b" b.txt
    +(扩展正则)
     
    表示其前面的字符出现最少一次的情况
     
    匹配 abc 和 abcc:
    echo -e "abc abcc add" |grep -E 'ab+'
    匹配单个数字:echo "113" |grep -o '[0-9]'
    连续匹配多个数字:echo "113" |grep -E -o '[0-9]+'
    ?(扩展正则)
     
    表示其前面的字符出现最多一次的情况(可以0个)
     
    匹配 ac 或 abc:
    echo -e "ac abc add" |grep -E 'a?c'
    []
     
    表示范围内的一个字符
    例子:过滤出包含数字的行           grep [0-9] a.txt
    例子:过滤出包含数字和小写字母的行 grep [0-9a-z] a.txt
    例子:过滤出包含字母asf的行        grep [asf] a.txt
    [ .-.]
     
    匹配中括号中范围内的任意一个字符
     
    匹配所有字母
    echo -e "a b c" |grep '[a-z]'
    [^]
     
    匹配[^字符]之外的任意一个字符
     
    匹配 a 或 b:
    echo -e "a b c" |grep '[^c-z]'
    匹配末尾数字:echo "abc:cde;123" |grep -E
    '[^;]+$'
    ^[^]
     
    匹配不是中括号内任意一个字符开头的行
     
    匹配不是#开头的行:
    grep '^[^#]' /etc/httpd/conf/httpd.conf
    {n}或者{n,}
     
    匹配花括号前面字符至少 n个字符
     
    echo "aadadccc" | egrep "a{2}"
    echo "aadadccc" | egrep "a{1}"
    {n,m}
     
    匹配花括号前面字符至少 n个字符,最多 m 个字符
     例子:
    "ac{2,5}b" 匹配a和b之间有最少2个c最多5个c的行
    "ac{,5}b" 匹配a和b之间有最多5个c的行
    "ac{2,}b" 匹配a和b之间有最少2个c的行
    <
     
     锚定单词首部(单词一般以空格或特殊字符做分隔)
     
    # echo "hi,root,iamroot" | grep "<root"
    hi,root,iamroot
     
    # echo "hi,root,iamroot" | grep "<root>"
    hi,root,iamroot
     
    >
     锚定单词尾部(单词一般以空格或特殊字符做分隔,)
     
     
    # echo "hi,root,iamroot" | grep "root>"
    hi,root,iamroot
    # echo "hi,root,iamroot" | grep "<root>"
    hi,root,iamroot
    ()
     
    1  调用前面的第一个分组,即调用前者的结果给后者
     
     
    例子:过滤出一行中有两个相同数字的行
    # grep "([0-9]).*1" inittab
     
    例子:过滤出行首和行尾字母相同的行
    # grep "^([a-z]).*1$" inittab
     
    | (扩展正则)
     
    匹配竖杠两边的任意一个
     例子:过滤出cat 或者Cat
    # egrep "cat|Cat" a.txt
    # egrep "(C|c)at" a.txt
    正则表达式中的{}以及()都需要加上进行转义,而扩展正则表达式不需要
    扩展正则加了 形成冲突导致无用。
    |, ?,+是扩展正则独有的
    锚定单词首部和尾部在扩展正则以及正则中都需要加上
  • 相关阅读:
    RocketMq(三、重试机制)
    RocketMq(二、生产者、消费者demo)
    VUE(四、ajax-axios)
    配置git DiffMerge工具
    Gerrit 删除项目
    html元素
    UML类图细节
    json 转 javaBean
    将文件的编码格式转换为utf-8
    第四篇:Eclipse Android app 工程迁移到 Android Studio
  • 原文地址:https://www.cnblogs.com/zgngg/p/10472855.html
Copyright © 2011-2022 走看看