正则表达式 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类地址