1.基础元字符
^ 以什么开头
^h 以h为开头的内容
$ 以什么结尾
. 一个任意字符
* 匹配前一个字符0个到多个
ip*address 可以匹配到:i、ipaddress、ippaddress......等包含任意个p的字符串
.* 匹配任意长度的内容
\ 使右侧的正则符号失去含义,变为字符 \** 匹配任意个*号的内容
[] 范围选择匹配符,匹配的信息不再是任意,由[]内的信息决定
[a,z] 小写字母任意的内容
[0-9] 数字任意的内容
^[a-zA-Z] 以字母开头的内容
[^0-9] ^ 写在中括号里面表示反选,不能是数字的内容
^[^0-9] 不是以数字开头的内容
f[oo|ee]t | 写在中括号里面表示或 foot、feet都能匹配到
{} 设定左侧表达式的个数,需要用\转译\{\}
6\{3\} 匹配左侧表达式3个:666
6\{3,\} 匹配左侧表达式3个到任意个:666、666666、6666666、666666666...
2.扩展正则表达(egrep、grep -e)
+ 匹配重复前一个字符1个到多个,和*类似
? 零个或者一个的前一个字符
| 或者
() 查找“组”字符串
()+ 辨别多个重复的组
3.常用正则
grep -ni ‘a’ test.txt
n表示显示行号,i表示不区分大小写,即在test.txt中找到所有包含a和A的行并显示行号
grep -n ‘[\.$]’ test.txt
找出以.结尾的行
grep -n ‘a.*a’ test.txt
找出包含a与a之间无字符或者任意字符的行,也就是这个行里有两个a
egrep -n ‘ab?c’ test.txt
找出包含a与c之间有一个或者零个b的行
grep “^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$” test.txt
找出ip地址格式的行