正则表达式 regular expression

可以在egrep、sed、awk等等命令中使用 egrep中的使用:

[root@localhost 217]# egrep "</h1>$" csweb.html 
Welcome to changsha!
长沙欢迎您!

元字符:有特殊作用的字符

元字符 意义 举例 举例意义 可匹配结果
^ 行开头 ^aa 以aa开头 aa aaa aa_ aa123 ......
$ 行结尾 aa$ 以aa结尾 aa 312aa ......
^$ 空行
^aa$ 整行只有aa ^a$ 匹配只有a的行,aba也不行 a
? 前面的字符出现1次以下 ab? 出现0次或1次,就是不确定的意思 a ab
+ 前面的字符出现1次以上 ab+ b出现1次以上 ab abb abbb ……
{} 指定前面的字符出现次数范围 ab{2,}c b出现2次以上,{,5}这是5次以下 abbc abbbc ……
* 前面的字符出现任意次 ab* b出现0次或多次 a ab abb abbb ……
. 除换行符外任意一个字符 gr.p gr后接一个任意字符然后是p grep grap gr@p gr1p ……
.{} 指定任意字符出现次数 ab.{2,4} b后面出现2到4个任意字符 ab#$ ab123 ab!4rq ab…
.* 代表任意个任意字符 ……
| a|b 包含a或b
[] 文字字符域,单个字符匹配 [abc] 包含a、b、c任意一个,等同a|b|c awd _23rc bbb
[^] 取反,只要一行里有一个字符符合条件整行都会匹配 [^abc] 不包含abc中任意一个字符 qwe a13 ……
\s 空白符(空格、tab) a\sb a和b之间有空白 a b、a b
\<、\b 单词开头 \<re 单词以re开头 remove reverse review ……
\>、\b 单词结尾 tion\> 单词以tion结尾 fanction revolution ……
() 实现多个字符分组 f(oo)* oo可以出现任意次 f foo foooo ……

例一:查找文章有效行,过滤注释和空行

egrep -v "^#|^$" /etc/ssh/sshd_config

例二:查找以非数字开头的行,[:digit:]=[0-9]

egrep "^[^[:digit:]]" rex.txt

例三:准确查找,在chang、changsha、quchang、quchangsha中查找到’chang‘

echo "chang changsha quchang quchangsha" | egrep "\<chang\>"   # "\<chang\>"等同于"\bchang\b"

例四:查找出/etc/passwd文件中用户名含有zhang并且使用bash的用户

egrep "zhang" /etc/passwd | egrep "bash$"

例五:找出邮箱

egrep -o "[0-Z_.]+@[0-Z]+\.[a-z]+" mail.txt
[root@localhost 21718]# egrep -o "[0-Z_.]+@[0-Z]+\.[a-z]+" mail.txt 
feng@qq.com
2134@163.com
meng.xianghui@yahoo.cn
liudehua@sina.com
10001@qq.com
qilu@qilu.edu
qilu@qilu.edu

例六:找出网站,需要过滤的网站格式可能不同,可以自行修改

egrep -o "[0-Z]+://([0-Z]+\.){2,3}[0-Z]+((/[0-Z_]+)+)?" web.txt
[root@localhost 21718]# egrep -o "[0-Z]+://([0-Z]+\.){2,3}[0-Z]+((/[0-Z._]+)+)?" web.txt 
http://www.baidu.com
http://www.sina.com
http://www.163.com
http://www.12306.cn
http://www.qillu.edu
rsync://www.github.com/abc
ftp://192.168.0.1
ftp://www.baidu.com
http://c.biancheng.net/c/ascii

例七:找出ip地址

ipv4 IP地址类型: A:1~126 B:128~191 C:192~223

A类ip地址的格式: 第1段:1~126 第2~4段:0~255

思路: 0~126 1位数字:1-9 2位数字:10-99 3位数字:100-119 120-126

0~255 1位数字:0-9 2位数字:10~99 3位数字:100~199 200~249 250~255

B类ip地址格式: 第1段:128~191 第2~4段:0~255

思路同上

egrep  "\b([1-9]|[1-9][0-9]|1[01][0-9]|12[0-6])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\b"		# 查找A类地址
egrep  "\b(12[89]|1[3-8][0-9]|19[01])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\b"		#查找B类地址