正则表达式基本元字符
1、字符匹配
.:匹配单个字符 例如:~]#grep "r..t" /etc/passwd
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] (匹配数字)
[:lower:](匹配小写字母)
[:upper:](匹配大写字母)
[:alpha:](匹配所有字母)
[:alnum:](匹配字符和数据)
[:punct:](匹配所有标点符号)
[:space:](匹配空格)
例如:~]#grep "r[[:alpha:]][[:alpha:]]t" /etc/passwd
2、匹配次数:用在要指定出现次数的字符的后面,用于限时其前面的字符出现的次数。
*:匹配其前面的字符任意次(0次,1次或无数次)
例如:grep "x*y" 此表达是匹配:abxy; aby; yyy; ydv;xxxxxxxxy
.*:(点星)匹配任意长度的任意字符
例如:grep "r.*" /etc/passwd 匹配结果:列出所有以r开头的所有字符串(字符串内可以包含数字)
\?:匹配其前面的字符0次或1次 即:前面的字符是可有可无的
例如:grep "x\?y" 此表达是匹配:abxy; aby; yyy; ydv;xxxxxxxxy
\+:匹配其前面的字符1次或多次 即:其前面的字符至少要出现一次
例如:grep "x\+y" 此表达是匹配:abxy; xxxxxxxxy
\{m\}:匹配其前面字符m次 即:指定次数,多一次少一次都不可
例如:grep "x\{1\}y" 此表达是匹配:abxy; xxxxxxxxy
grep "x\{2\}y" 此表达是匹配: xxxxxxxxy
\{m,n\}:匹配其前面字符至少m次至多n次
\{0,n\}:匹配其前面字符至多n次
\{m,\}:匹配其前面字符至少m次
例如: grep"x\{1,5\}y" 此表达是匹配:abxy;
grep"x\{1,8\}y" 此表达是匹配:abxy;xxxxxxxxy
grep"x\{0,8\}y" 此表达是匹配:abxy; aby; yyy;xxxxxxxxy
grep"x\{1,\}y" 此表达是匹配:abxy; xxxxxxxxy
3、位置锚定
^:行首锚定 用于模式的最左测
例如:grep "^root" /etc/passwd
$:行尾锚定
例如:grep "root$" /etc/passwd
^PATTERN$:用PATTERN来匹配一整行
例如:grep "^root$" /etc/passwd
grep"^$" /ete/passwd (空白行,不能由空格)
grep"^[[:space:]]*$"(空白行,可以包含空白字符)
单词:非特殊字符组成的连续字符(字符串)都称为单词
\<或者\b :词首锚定,用于单词模式的左侧
\>:词尾锚定,用于单词模式的左侧
例如: grep "\<root" /etc/passwd 查询结果:所有以root开头的单词的一整行内容
grep "root\>" /etc/passwd 查询结果:所有以root结尾的单词的一整行内容
grep "\<root\>" /etc/passwd 查询结果:所有root单词的一整行内容
相关实践:
1、显示/etc/passwd/ 不以/bin/bash 结尾的行
grep -v "/bin/bash$" /etc/passwd
2、找出/etc/passwd文件中的三位数或者四位数
grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd
3、找出/etc/grub2.cfg文件中,至少一个空白开头,结尾非空白的行
grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
4、找出netstat -tan 名利结果中以"LISTEN"后跟0,1或多个空白符结尾的行
netstat -tan |grep "LISTEN[[:space:]]*$"
4、分组及引用
\{\}:将一个或多个字符捆绑在一起,当做一个整体进行处理
\{xy\}*ab
注意:分组括号内的模式匹配到的内容 会被正则表达式内的引擎自动记录于内部变量中,变量为:
\1 模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\2 模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\3 模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符
后向引用:引用前面的括号里的模式所匹配的字符