LInux三剑客之正则表达式

正则表达式注意事项:
正则的符号,都是英文;
推荐使用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:] :数字;

 

posted @ 2022-12-19 11:16  mclind  阅读(47)  评论(0编辑  收藏  举报