• shell脚本 正则表达式


    一、正则表达式

    1. 介绍

            正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是由普通字符与元字符组成

            普通字符包括大小写字母、数字、标点符号及一些其他符号

            元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

    主要用来匹配字符串(命令结果,文本内容)

    2. 分类

    • 基本正则表达式

    • 扩展正则表达式

    man 7 regex
    可以使用 man手册帮助

    3. 元字符

    支持的工具:grep、egrep、sed、 awk

    字符作用
    \转义字符,可以把一些特殊的符号转换成普通的符号字符,还可以把一些普通字符转换成特殊功能,例:\!、\n、\$等
    ^表示匹配字符串开始的位置,匹配行首,例: ^a、 ^#
    $表示匹配字符串末尾的位置,匹配行尾,例: word$、 #$ ;^$表示空行
    .匹配除\n之外的任意的一个字符,例: go.d、g..d
    *匹配前面的字符任意次,包括0次,例: goo*d、go.*d
    .*任意长度的任意字符  不包括0次
    [my]表示匹配[ ]中包含的任一字符
    [^my]表示匹配除[ ]中包含的任一字符
    \d匹配一个数字字符
    \D匹配一个非数字字符。等价于[^0-9]。

    字符

    字符作用
    []匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z]   [[:alpha:]]    [0-9a-zA-Z]= [:alnum:]
    [^]匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
    [:alnum:]字母和数字
    [:alpha:]代表任何英文大小写字符,亦即 A-Z, a-z
    [:lower:]小写字母,示例:[[:lower:]],相当于[a-z]
    [:upper:]大写字母
    [:blank:]空白字符(空格和制表符)
    [:space:]包括空格、制表符 (水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
    [:cntrl:]不可打印的控制字符(退格、删除、警铃...)
    [:digit:]十进制数字
    [:xdigit:]十六进制数字
    [:graph:]可打印的非空白字符
    [:print:]可打印字符
    [:punct:]标点符号
    \w匹配单词构成部分,等价于[_[:alnum:]]
    \W匹配非单词构成部分。等价于"[^A-Za-z0-9_]"。
    \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意Unicode 正则表达式会匹配全角空格符
    \S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

    表示次数

    位置锚定

    \b   匹配单词边界处的位置(开头和结尾) \bword\b 等价于 \

    \<   匹配单词开头处的位置

    \>   匹配单词结尾处的位置

    \B   匹配非单词边界处的位置

    中括号表达式:

    普通中括号包围的字符组,表示某个单个字符匹配中括号内的任意字符即匹配成功

            1. x[abc]z : 可以匹配包含“xaz”、“xbz”、“xcz”的字符串
            2. 取反表示法: 中括号内开头使用 ^ ,表示只要不是中括号内的字符就匹配   

    x[ ^abc]z : 可以匹配包含 “xdz”、“xez” 等字符串,但不能匹配包含“xaz”、“xbz”、“xcz”的字符串 

    特殊元字符在中括号中匹配:

    想要在中括号中匹配: ^ ,需要将其放在 中括号非开头的位置 ,如:[a^]
    想要在中括号中匹配: - ,需要将其放在 开头位置或结尾位置 ,如:[abc-]、[-abc]
    想要在中括号中匹配: ] ,需要将其放在 开头位置 ,如:[]abc]

    扩展正则表达式

    grep -E

    egrep 默认使用的 是扩张正则

    表示次数

    *   匹配前面字符任意次
    ? 0或1次
    + 1次或多次
    {n} 匹配n次
    {m,n} 至少m,至多n次
    {,n}  #匹配前面的字符至多n次,<=n,n可以为0
    {n,} #匹配前面的字符至少n次,<=n,n可以为0

    表示分组

    () 分组
    分组:() 将多个字符捆绑在一起,当作一个整体处理,如:rootroot+
    后向引用:\1, \2, ...
    | 或者  
    a|b #a或b
    C|cat #C或cat
    (C|c)at #Cat或cat

  • 相关阅读:
    Linux 连接已经终止的线程 线程的分离 线程取消
    nohup训练pytorch模型时的报错以及tmux的简单使用
    面板平滑转换回归(PSTR)分析案例实现
    E - Power and Modulo
    React:五、React脚手架应用
    ubuntu生成pem证书连接服务器(已验证)
    二分专题训练
    MySQL|子查询
    算法分析——大O标记法之时间复杂度
    [项目管理-17]:技术研发、项目管理、部门管理三种角色的详细比较
  • 原文地址:https://blog.csdn.net/qq_35995197/article/details/136377826