linux正则表达式之文本三剑客(上)

1、正则表达式

2、grep命令


一、正则表达式(regular expression)

写正则就是找规律

在正则表达式中 ^(表示以什么开头)  $ (表示以什么结尾)

例如:     ^aa 表示以aa开头的行
                aa$ 表示以aa结尾的行
                [] 表示一个字符集
                [a-z] 从a - z 中取一个
                [^a-z] 不取a-z的字符     在[]里 ^ 代表取反的意思

1、正则通配符

?        代表前一项匹配1次或0次

 +        代表前一项匹配1次以上

 *         代表前一项匹配任意次

  .        匹配单个字符单个字符 

{n}       代表前一项 匹配n次

{n,}       代表前一项匹配n次以上 

{n,m}  代表前一项匹配n--m次      

例题:

1、查找出/etc/login.defs文件中的有效行(不显示空行和注释行)。

[root@lamp-test lianxi]# egrep -v "^$|^#" /etc/login.defs

 2、查找出/var/log/messages文档中有16个字母的单词?

[root@lamp-test lianxi]# egrep  "\b[a-Z]{16}\b" /var/log/messages-20211215 

3、查找出来/etc/passwd文件里用户名包含liu同时使用bash的用户

[root@lamp-test lianxi]# egrep  ".*liu.*bash.*" /etc/passwd 

4、查找出/etc/ssh/sshd_config 文件里的包含连续2个数字的行

# egrep  "\b[0-9]{2}\b" /etc/ssh/sshd_config

 5、查找出包含特殊字符的行

egrep  "[^0-Z]" /etc/ssh/sshd_config 

6、查找出不包含数字的行

[root@lamp-test lianxi]# grep -v  "[0-9]" /etc/ssh/sshd_config

7、写出匹配192.168.23.1的正则,第一段是192-223之间,后面的是0--255之间

思路分析:

192-223可以分三步走:1;192--199

                                      2;200--219

                                      3;220--223

结果:19[2-9]|2[01][0-9]|22[0-3]

0-255可以分五步走:1;0--9

                                   2;10--99

                                   3;100--199

                                   4;200--249

                                   5;250--255

结果:[1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]

综合得:(19[2-9]|2[01][0-9]|22[0-3])(\.([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}

二、grep命令

文本三剑客 ==> (awk grep sed)

-E 支持扩展正则,也可以写成(egrep)

-i  查找时忽略大小写(ignore case)

-n 查找时显示行号(line number)

-o 查找时只显示匹配的内容

-A 找到匹配行以及后几行

-B 输出匹配行以及前几行

-r 递归搜索所有文件

-v 反转查找,输出与模式不相符的行

-n 显示符合模式要求的行号

\bworld\b     \b...\b 单词的边界      也可以使用\<...\>

\bworld     以world这个单词开头

world\b     以world这个单词结尾

例题:

写一个表示邮箱的正则
feng@qq.com
1234feng@163.com
meng.xianhui@yahoo.cn
liudehua@sina.com
10001@qq.com
123_ui@12306.cn
qilu@qilu.edu
qilu@qilu.edu/fjdkfjk/fjdk

egrep "[0-Z_.]+@[0-Z]+\.[0-Z]+"  mail.txt

写一个表示下面网址的正则表达式出来。例如:
http://www.baidu.com
http://www.sina.com
http://news.163.com
http://www.12306.cn
http://www.qillu.edu
rsync://www.github.com/abc
ftp://192.168.0.1
ftp://www.baidu.com

egrep "[a-Z]+://([0-Z]+\.){2}[0-Z]+(\.[0-Z]+)?" web.txt

上一篇:python smtp给多人发送邮件


下一篇:shell正则