正则表达式符号含义
发明1套符号
不同符号不同含义
方便我们在文件中查找/过滤内容
通配符与正则区别?
作用 | 支持的命令 | |
---|---|---|
通配符 | 方便我们进行查找文件 | Linux下面大部分命令支持 |
正则 | 方便我们进行过滤(在文件中找内容) | Linux三剑客 开发语言 |
正则表达式中注意事项
注意中文符号‘’ “” . …… ¥ () {} 【】 中文'' "" . ^ $ () {} [] 英文
在CentOS 6中给grep egrep加上颜色方便看查找内容alias grep='grep --color=auto'
CentOS 7中已自动设置
正则表达式分类:
基本正则(BRE)
^ 以...开头的行 ^old
$ 以...结尾的行 old$^$ 空行 -n显示行号这一行中什么都没有 grep '^$’oldboy.txt空行 grep -n排除空行 grep -nv. (点)匹配任意字符 类似通配符的问号 不匹配空行grep -o (补充grep的参数)显示grep每次过滤出什么内容显示grep执行过程.$ 以任意字符结尾的行(坑)\ 转义 让原有特殊含义的字符脱掉马甲 还愿本义\n 回车\t 按tab键tr '\n' '\t' >oldboy.txt 替换内容中的回车
* 逐行匹配,前1个字符连续出现0次或0次以上000000000000000000 连续出现的0oldboy
.* 表示所有内容
^.* 组合符以任意0个或多个字符开头
.*$ 组合符以任意0个或多个字符结尾[abc] 匹配[]集合内的任意一个字符a或b或c也可以写成[a-c]
[^abc] 取反,不包含[]集合内的任意一个字符a或b或c也可以写成[^a-c]
小测试:
显示以m或n或o开头的行
以m或n或点结尾的行
显示以m或n或o开头的并且以m或n或点结尾的行
※ 扩展正则表达式(ERE)
egrep ===grep -E
用于在文件内查找指定的字符串。egrep
执行效果与[grep] -E
相似
+ 匹配前一个字符1次或1次以上一般与[ ]一起使用
| 或者
() 分组过滤被括起来的东西表示一个整体用来表示后向引用被括起来的内容相当于是1个整体? 匹配前一个字符0次或1次
{
} 匹配字符最少几次,最多几次a{
n,m} 匹配a最少n次,最多m次a{
n,} 匹配a最少n次a{
n} 匹配a只有n次a{
,m} 匹配a最多m次[:/]+ 匹配:或/1次或多次\n 后项引用,例如(aa)\1 匹配aaaa
主要的扩展正则表达式
. + 匹配前一个字符1次或1次以上,一般与[ ]一起使用
| 或者
( ) 用来表示后向引用
? 匹配前一个字符0次或1次
[?root@oldboy /tmp]# egrep -n "oldboy|linux|txt" oldboy.txt
2:I am oldboy teacher!
3:I teach linux.
6:my blog is http://oldboy.blog.51cto.com
7:our size is http://blog.oldboyedu.com
13:oldboy.txtoldboy.txt
() 后向应用(反向引用)
[?root@oldboy /tmp]# egrep -n "oldb(o|e)y" oldboy.txt
2:I am oldboy teacher!
6:my blog is http://oldboy.blog.51cto.com
7:our size is http://blog.oldboyedu.com
11:my god ,i am not oldbey,but OLDBOY!
13:oldboy.txtoldboy.txt
{ } 匹配字符最少n次,最多m次
[?root@oldboy /tmp]# egrep '0{1,3}' oldboy.txt
my qq is 49000448
not 4900000448.
45702$
[?root@oldboy /tmp]# egrep -o '0{1,3}' oldboy.txt
000
000
00
0
查询18位身份证的小测试
首先我们添加环境:
vim oldboy.txt
金 211324198705244720
万 500224197105168312
任 1231231231oldboy
任 3oldboy
任 lidao97303136098
任 alex2197303136098
任 350182197303oldgir
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
XXXXXXXXXXXXXXXXXX0
以1-9开头过滤
egrep '[0-9X]{18}' oldboy.txt
[?root@oldboy /tmp]# egrep '[0-9X]{18}' oldboy.txt
金 211324198705244720
万 500224197105168312
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
XXXXXXXXXXXXXXXXXX0
以1-9开头 1-9或X结尾
egrep '[0-9]{17}[0-9X]$' oldboy.txt
[?root@oldboy /tmp]# egrep '[0-9]{17}[0-9X]$' oldboy.txt
金 211324198705244720
万 500224197105168312
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X
未完待续…