shell中的正则表达式, and和or写法, vim中的查找和替换用法, 正则中的posix字符类
1. shell中的正则和原生的正则有些许出入, 以下列举了shell中的正则规则:
图中\number 代表前面对应()位置的内容, 类似于python中的命名分组, \对应数字可直接引用括号中内容
注意扩展正则元字符的使用结果可能和预期有差异, 对比扩展和基本两个截图, 会发现, 同样的一个字符, 会使用\, 这就是
问题所在, 在grep中默认使用的都是基本元字符, 要想使用扩展元字符可在对应位置加\ 或者使用egrep来代替grep命令.
2. shell中的正则使用举例:
双括号的额外含义, 其内可使用正则表达式, 并不表示正则必须在双括号中才能执行;
[[ 10 =~ ^[0-9]+$ ]] 用于shell中判定是否是数字, 注意正则处不要加引号, 加引号表示字符串匹配; 取反在10前加叹号即可;
shell中这些命令都是根据正则规则来解析的, 有vi, grep, sed, awk, python, vim;
3. vim中使用正则进行查找与替换:
vim编辑器中的替换, %表示全文, 即第一行到最后一行. s表示替换, 完整命令如下:
: %s/xx/XX/ # 表示把小写xx换为大写的, 只替换第一个, 无论第一个是否是单纯的xx或包含其他字符的
: %s/ss/SS/g # 替换全局, 所有包含ss的都替换, 无论ss是否是单独的.
: %s/\<ss\>/SS/g # \< \>用于限定词首和词尾, 限定ss两边不能有字母, 标点除外
正则中严格区分大小写, shell中匹配不会严格区分
4. shell中的and和or用法举例:
[ 1 -lt 2 -a 5 -gt 10 ] [ 1 -lt 2 -o 5 -gt 10 ]
[[ 1 -lt 2 && 5 -gt 10 ]] [[ 1 -lt 2 || 5 -gt 10 ]] # 等价于上面的写法