正则表达式实例教学

1 正则表达式字符介绍

参考 正则表达式手册

2 常用符号演示

在线测试网址 http://tool.chinaz.com/regex/

^

匹配输入字符串的开始位置
正则表达式实例教学

*

匹配前面的子表达式零次或多次
正则表达式实例教学

{n,m}

m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次正则表达式实例教学

[a-z]

字符范围,也有[0-9]等
正则表达式实例教学

3 实例演示

实例1

要处理的需求:匹配SCC_VID_COLOR_SYS_XXX,然后在其后面增加一个字符串YYY

  1. 步骤1:找到指定位置
    正则表达式实例教学
    讲解:
字段 SYS (_[A-Z]{1,}){1,2} (_[0-9]{1,}){0,},
讲解 SYS字符串 (_+大写字母+至少一个)+这样的结构一或两个 (_+数字+至少一个)+这样的结构没有或者有

更精简的写法:SYS(_[A-Z0-9]*){1,}

  1. 步骤2:替换内容
    下面这样写,结果不符合预期正则表达式实例教学
    这里要引入分组方法,在正则表达式里面用小括号()代表一个组,在替换的时候使用\1、\2代表第一个第二个分组。(有些工具使用\n,有些使用$n代表),下面这样写才对
    正则表达式实例教学
  2. 转化为代码正则
    如果是代码里面需要写正则表达式,那么还是刚才那个在线工具,就能把正则转换为不同语言的代码http://tool.chinaz.com/tools/regexgenerate,当然熟练的也可以自己直接写。
    正则表达式实例教学

    实例2

原数据:
Attr Name=“SW_PowerCurrent” Alias=“SW_PowerCurrent” Ids=“0” Atoms=“100”
要求:这种行,把最后的100换成0
最终ok的shell脚本
sed -i -r “s/(SW_PowerCurrent.Atoms=").(”)/\10\2/" $xxx/cvte_ocsxml.xml

这里有几个坑:
1、前面()的集合,后面要用的时候不能用$1,要用/1
2、用了/1和/2之后,会报错\2 on `s’ command’s RHS,原因是之前只用了sed -i,需要增加-r
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)