正则表达式注意事项:
正则的符号,都是英文;
推荐使用grep/egrep,默认设置了别名,自动加上颜色;
http://nbre.oldboylinux.cn 分析正则与正则匹配到的内容;
符号概述:
正则表达式 regular expression/regexp: 基础正则:^ $ . * .* [] [^]; 扩展正则:| () {} ? +; 其他类型正则;
|
基础正则:
三剑客命令默认支持的正则;
环境准备,创建一个文件,里边写上内容; 1)^,以……开头的行; grep '^root' /etc/passwd 2) $,以……结尾的行; # grep 'nologin$' /etc/passwd cat -A //可以看文件中隐藏的内容,比如,空格 3) ^$,空行,这行中没有任何字符,空格都不能有; 4). ,点,表示任意一个字符; grep 'r..t' /etc/passwd 注意:.,点它不会匹配空行; 5)\,撬棍,转义字符,脱掉马甲打回原形,去掉特殊符号的含义; 找出文件以.结尾的行;grep '.$' /etc/passwd,这样看起来没问题,但是.是匹配所有; grep '\.$' re.txt //加上个\,就表示.了,不会匹配所有字符; 6)*,前一个字符连续出现了0次或0次以上; 这个符号刚开始学习正则的时候不常用; 7).*,表过所有;任意字符出现了任意次; 当正则匹配连续出现的时候,是贪婪匹配; 8)[],中括号,[abc],表示匹配中括号里边的任意一个字符,a或b或c; 匹配数字 [0-9] 小写字母 [a-z] 大写字母 [A-Z] 大小写字母[A-Za-z] 或者简写[a-Z] 大小写字母+数字,[a-Z0-9]/[0-Z] 匹配以.或!或空格结尾的行 grep [.! ] re.txt //在中括号中,会自动去掉特殊符号的含义; 9)[^],中括号中,取反操作;[^abc],表示匹配任意一个非abc的字符; 建议:掌握正则一段时间后再来使用;
|
扩展正则
1)+ 前一个字符连续出现1次或多次;大部分配合着中括号一起用; 取出连续出现的0 egrep '0+' re.txt //要用扩展正则,grep无法识别,需要用egrep 或 grep -E,sed -r支持扩展正则; 只想看匹配的内容,不要其他内容:-o(字母O) [root@web01 ~]# egrep -o 'o+' /etc/passwd 取出连续的数字:egrep '[0-9]+' re.txt 取出连续出现的字母(单词):egrep '[a-Z]+' re.txt
2) | 或者 文件中包含mclind或linux的行 egrep 'mclind|linux' re.txt 过滤出/etc/ssh/sshd_config中的空间或注释,输出的时候显示行号 [root@web01 ~]# egrep -n '^$|#' /etc/ssh/sshd_config [root@web01 ~]# egrep -nv '^$|#' /etc/ssh/sshd_config
3)(),小括号,表示一个整体;用于后向引用(反向引用sed) grep 'mclind|mclond' re.txt grep 'mcl(i|0)nd' re.txt
4){}, a{n,m},表示前一个字符,至少出现n次,最多m次; a{n},表示前一个字符,连续出现n次; a{n,},表示前一个字符,至少出现n次; a{,m},表示前一个字符,至少0次,至多m次;
5)?,表示前一个字符,出现了0次或1次; egrep 'gd|god' re.txt egrep 'go?d' re.txt
|
perl语言正则表达式
1)\d :数字,相当于[0-9]; grep -P '\d' re.txt 2)\s:匹配空字符,比如空格,tab键等; 3)\w:[0-9a-zA-Z_] 4)\D : \d取反,非数字; 5)\S :\s取反,非空; 6)\W:\w取反,排除字母数字和下划线;
|
零碎的正则-括号表达式
info grep中可以查到,很多 grep '[[:alnum:]]' re.txt //匹配数字和字母 [:alpha:] : 字母; [:digit:] :数字;
|