shell脚本:正则表达式

224 阅读2分钟

通配符和正则表达式

二者的区别

通配符:用于匹配文件名

正则表达式:用于匹配文件内容

正则表达式

元字符

字符选项含义
.匹配任意单个字符,可以是一个汉字
[ …]匹配指定范围内的任意单个字符
[^ …]匹配指定范围外的任意单个字符
1匹配以…开头的字符串
/. = [ . ]
匹配符含义
[:alnum:]字母和数字
[:alpha:]代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:]大写字母
[:blank:]空白字符(空格和制表符)
[:space:]包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:]不可打印的控制字符(退格、删除、警铃…)
[:digit:]十进制数字
[:xdigit:]十六进制数字
[:graph:]可打印的非空白字符
[:print:]可打印字符
[:punct:]标点符号
\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

表示次数

字符选项 含义

  • 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配 .* 任意长度的任意字符,不包括0次 ? 匹配其前面的字符出现0次或1次,即:可有可无
  • 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次 {n} 匹配前面的字符n次 {m,n} 匹配前面的字符至少m次,至多n次 {,n} 匹配前面的字符至多n次,<=n {n,} 匹配前面的字符至少n次

位置锚定

字符选项含义
^行首锚定, 用于模式的最左侧
$行尾锚定,用于模式的最右侧
^PATTERN$用于模式匹配整行 (单独一行 只有root)
^$空行
2*$空白行
\< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词