shell 正则表达式

一、正则表达式

正则表达式和通配符的区别:

   ①式用来在文件中匹配符合条件的字符串。通配符用来匹配符合条件的文件名

   ②grep,awk,sed 等命令可以支持正则表达式,ls,find,cp 这些命令不支持正则表达式,只能用通配符进行匹配

基础正则表达式

*   前一个字符匹配0次或任意多次。如果是通配符,直接表示任意内容

gjl@gjl-virtual-machine:~/shellTest$ grep "a*"  test01.sh
gjl@gjl-virtual-machine:~/shellTest$ grep "a*to"  test01.sh

a* 代表匹配出0个或多个包含a的行,如果想要匹配出一个以上,使用aa*

 

. 匹配除了换行符以外匹配任意内容

gjl@gjl-virtual-machine:~/shellTest$ grep ".*"  test01.sh  匹配任意字符

gjl@gjl-virtual-machine:~/shellTest$ grep "o..r"  test01.sh 匹配o和r之间有两位的字符

^ 匹配行首,$ 匹配行尾

gjl@gjl-virtual-machine:~/shellTest$ grep "^r"  test01.sh  匹配行首
gjl@gjl-virtual-machine:~/shellTest$ grep "r$"  test01.sh  匹配行尾
gjl@gjl-virtual-machine:~/shellTest$ grep "\"$"  test01.sh  匹配以“结尾的,需要转义符
gjl@gjl-virtual-machine:~/shellTest$ grep -v "^$"  test01.sh  剔除空行

[]匹配中括号中的任意一个字符

gjl@gjl-virtual-machine:~/shellTest$ grep "[==]" test01.sh  匹配包含=的字符

gjl@gjl-virtual-machine:~/shellTest$ grep "[0-9]" test01.sh 匹配包含数字的字符

[^]匹配除了中括号中的任意一个字符

gjl@gjl-virtual-machine:~/shellTest$ grep "[^a-z]" test01.sh  不包含字母的字符
gjl@gjl-virtual-machine:~/shellTest$ grep "[^0-9]" test01.sh  不数字的字符
gjl@gjl-virtual-machine:~/shellTest$ grep "^[^a-z]" test01.sh  以非字母开头的字符

/ 转义符,用于取消特殊符号的含义

\{n\} 表示前面字符出现n次

\{n,}  表示前面字符至少出现n

\{n,m\} 表示前面字符至少出现n次,最多出现m次

gjl@gjl-virtual-machine:~/shellTest$ grep "o\{2\}" test02.sh
gjl@gjl-virtual-machine:~/shellTest$ grep "[0-9]\{5\}" test02.sh

gjl@gjl-virtual-machine:~/shellTest$ grep "[0-9]\{3,\}" test02.sh



gjl@gjl-virtual-machine:~/shellTest$ grep "[0-9]\{3,5\}" test02.sh

注意:如果使用grep -E,\{n\}中转义符可以不需要

二、扩展正则

扩展正则必须使用egrep 或grep -E 选项

+ 前一个字符匹配一次或任意多次

?前一个字符匹配0次或1次

| 匹配两个或多个字符

() 匹配其整体为一个字符

gjl@gjl-virtual-machine:~/shellTest$ grep  -E "a+d"  test02.sh

gjl@gjl-virtual-machine:~/shellTest$ grep  -E "a?d"  test02.sh

gjl@gjl-virtual-machine:~/shellTest$ grep  -E "i(a|s)"  test02.sh

三、案例

①过滤邮箱

gjl@gjl-virtual-machine:~/shellTest$ grep -E "[a-z0-9A-Z_]+@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){1,3}" test02.sh
123@weq.com
qwe@123.cn
123@12.com
gjl@gjl-virtual-machine:~/shellTest$ 

 

shell 正则表达式

上一篇:cache


下一篇:Linux expr 命令