正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
1、字符匹配
. #匹配任意单个字符
[] #匹配指定范围内的单个字符
[^] #匹配指定范围外的单个字符
[:digit:] #数字
[:lower:] #小写字母
[:upper:] #大写字母
[:alpha:] #所有字母
[:alnum:] #数字和字母
[:punct:] #所有标点符号
[:space:] #空格
例:grep “r[[:alpha:]][[:alpha:]]t” /etc/passwd #rt中间匹配两个字母
2、匹配字数
* #匹配其前面的字符任意次,0,1,多次
.* #匹配任意长度的任意字符
\? #匹配其前面的字符0或1次,即前面字符可有可无
\+ #匹配其前面的字符1次或1次以上
\{m\} #匹配前面的字符m次
\{m,n\} #匹配前面的字符至少m次最多n次
\{0,n\} #匹配前面的字符最多n次
\{m,\} #匹配前面的字符至少m次
3、位置锚定
^ #行首锚定,用于模式的最左侧,脱字符
例:grep "^root" /etc/passwd
$ #行尾锚定,用于模式的最右侧
例:grep "root$" /etc/passwd
^PATTERN$ #用于PATTERN匹配整行
^$ #空白行
^[[:space:]]*$ #空行或包含空白字符的行
\< \b #词首锚定
\> \b #词尾锚定
\<pattern\> #匹配完整单词
4、分组和引用
分组
\(\) #将一个或多个字符捆绑,当整体处理
\(xy\)*ab #命令行中括号有特殊意义所以用转义符\
引用
\1 #模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\2 #模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\3 #模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符
...