sed中使用正则表达式进行替换的时候,一定要注意,有些特殊字符在使用时要转义,目前发现的有:
- 用于分组的小括号:(),在使用时要用\进行转义,但是匹配字符串中真正的小括号时,无需转义;
- 表示前面的表达式出现次数的{},也要转义;
- 表示前面的表达式出现1次或多次的+,也要转义,在使用时,要用\+
- 表示前面的表达式至多出现1次?,也要转义,在使用时,要用\?
不需要转义的特殊字符:
- 用于表示字符集的[]
- 表示前面的表达式出现0次或多次的*
有些特殊字符在sed的正则表达式中不能用,比如要表示匹配一个数字不能用\d,而要用[0-9],例如:
#想要把u8Speed中的8替换为32,方法一失败,方法二成功:
>echo "u8Speed" |sed -e 's/\d/32/g'
>u8Spee32
>echo "u8Speed" |sed -e 's/[0-9]/32/g'
>u32Speed
但是\b、\w可以用,分别表示单词边界,字母数字下划线即[a-zA-Z0-9_]
此贴持续更新,后续发现需要转义的或者不需要转义的,会不断更新。文章来源:https://www.toymoban.com/news/detail-421499.html
sed使用正则表达式替换的例子:文章来源地址https://www.toymoban.com/news/detail-421499.html
#例1:
>echo "VAR(int, AAAAA) b;" |sed -e 's/\bVAR(\([a-z]\{1,\}\),\( \)*\([A-Z]\+\))/\1/g'
>int b;
#上面的命令中,{}、+、()都进行了转义
#此命令的功能是,将autosar风格的变量定义,转换成常见的变量定义,上述命令输出结果为:
#int b;
#例2:
对于宏进行替换:
#define GetData(u8, speed, (int)ZERO) u8speed[(int)ZERO]
>echo "GetData(u8, speed, (int)ZERO);" |sed -e 's/\bGetData(\?\(\w\+\), *\(\w\+\), *\((\?\w\+)\?\)\(\w\+\))/\1\2[\3\4]/g'
>u8speed[(int)ZERO]
到了这里,关于sed中使用正则表达式进行替换以及注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!