首页 > 代码库 > 正则表达式
正则表达式
1.1什么是正则表达式?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式种类:
BRE(基础正则表达式) ^ $ . [] * 其他字符识别为普通字符;
ERE(扩展正则表达式) () {} ? + |等。
1.2Linux正则表达式是用来干什么的。
在linux中是用来查找文本的内容,通过正则表达式和awk.grep.sed等来快速显示替换文件内容。
1.3Linux正则表达式特点。
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
1.4Linux正则表达式学习前准备。
为方便学习正则表达式可进行别名修改,让搜索出来的内容显示颜色。
[root@oldboy36 ~]# alias egrep=‘egrep--color=auto‘ [root@oldboy36 ~]# alias grep=‘grep--color=auto‘ [root@oldboy36 ~]# cat >>etc/profile<<EOF > alias egrep=‘egrep--color=auto‘ > alias grep=‘grep--color=auto‘ > EOF [root@oldboy36 ~]# source /etc/profile [root@oldboy36 ~]# |
字符 | 描述 |
^尖角号 | ^word 找以word开头的行 |
[root@oldboy36 data]# grep "^m" oldboy.txt my blog is http://oldboy.blog.51cto.com my qq num is 49000448. my god ,i am not oldbey,but OLDBOY! [root@oldboy36 data]# | |
$ | word$ 查找以word的结尾的行 |
[root@oldboy36 data]# grep "m$" oldboy.txt my blog is http://oldboy.blog.51cto.com [root@oldboy36 data]# | |
^$ | 表示空行,不是空格 |
[root@oldboy36 data]# grep -n "^$" oldboy.txt 3: 8: 11: [root@oldboy36 data]# | |
.(点) | 代表且只能代表任意一个字符/文本/符号(不匹配空行) |
[root@oldboy36 data]# grep "." oldboy.txt .显示了所有内容空格可以找到但是空行不可以找到 [root@oldboy36 data]# grep "ol.boy" oldboy.txt | |
\ | 转义字符,让特殊含义的字符脱掉马甲,现出原形 找出以点结尾的行 |
[root@oldboy36 data]# grep "\.$" oldboy.txt
穿上马甲\(扩展正则) \n 匹配一个换行符 \b单词边界, \bcool\b 匹配cool,不匹配coolant \>在边界的右边 \<在边界的左边 \r 匹配回车 \t 匹配一个横向制表符 tab | |
* | 重复 前一个文本/字符0次或多次 之前的一个文本或字符连续了出现了0个或多个连续 出现了0次 就代表啥也没有 一般跟0* 正则 贪婪 在表示重复的时候 尽可能的拿的更多 匹配的更多,找的更多。 |
[root@oldboy36 data]# grep "0*" oldboy.txt | |
.* | 代表所有 包含空行 ^.*以任意多个字符开头;.*$以任意多个字符结尾 正则表达式表示连续出现连续出现或者连续的时候有多少吃多少。 正则表达式的贪婪 |
[root@oldboy36 data]# grep ".*" oldboy.txt
以所有字符开头一直到字母m [root@oldboy36 data]# grep "^.*m" oldboy.txt | |
^.* | 以任意多个字符串开头 .* 尽可能多吃 有多少吃多少 |
[root@oldboy36 data]# grep "^.*m" oldboy.txt | |
括号表达式(筐) 表示一个整体相当于一个符号 文本 一次只匹配一个符号。 | |
[abc] [0-9] +[\.,/]
| 匹配字符集合(一个框里便有很多条件)内的任意字符a或b或c;[a-z]匹配所有小写字母 筐:代表的一个整体,里面啥都可能有 [abc]找a或b或c,可以写成[a-c] 可以进行组合 [a-zA-Z] 正则表达式认为只要是在框里的就是一样的 |
匹配字符集合(一个框里便有很多条件)内的任意字符a或b或c [root@oldboy36 data]# grep [a-c] oldboy.txt
| |
[^abc] | 匹配不包含……后的任意字符a或b或c,是对[abc]的取反,且与^含义不同. |
[root@oldboy36 data]# grep [^a-c] oldboy.txt
| |
基础正则的命令(grep)如何支持高级正则(扩展正则) | |
a\{n,m\} | 重复前面a字符n到m次。 如果用egrep或sed -r 可去掉斜线 最少出现n次,最多出现m次 \ 表示穿上马甲 \学生=======班长 扩展正则 |
[root@oldboy36 data]# egrep "0{1,2}" oldboy.txt | |
a\{n,\} | 重复前面a字符至少n次,如果用egrep或sed -r 可去掉斜线 |
[root@oldboy36 data]# egrep "0{3}" oldboy.txt | |
a\{n\} | 重复前面a字符n次,如果用egrep或sed -r 可去掉斜线 |
[root@oldboy36 data]# egrep "0{3,}" oldboy.txt | |
a\{,m\} | 重复前面a最多m次,如果用egrep或sed -r 可去掉斜线 |
[root@oldboy36 data]# egrep "0{,3}" oldboy.txt |
1.5 扩展正则表达式
特殊字符 | 内容及含义 |
+ | 重复前一个字符一次或一次以上 把连续的字符/文本取出来 若何让数字连续出现1次或多次 [0-9]+ 正则表达式里面 表示重复 的命令 连续重现特点 贪婪 有多少就连续多少次 [a-z] 取出文件的单词 |
[root@oldboyedu36-nb data]# egrep "0+" oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu36-nb data]# # [root@oldboyedu36-nb data]# #"0+" 前一个符号/文本 连续出现1次或多次 [root@oldboyedu36-nb data]# #正则表达式里面 表示重复 连续出现 贪婪 有多少吃多少 有多少连续多少次 [root@oldboyedu36-nb data]# egrep "0" oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu36-nb data]# egrep "0+" oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu36-nb data]# ###找连续的0 [root@oldboyedu36-nb data]# [root@oldboyedu36-nb data]# egrep -o "0" oldboy.txt 0 0 0 0 0 0 0 0 [root@oldboyedu36-nb data]# ####grep egrep -o 会把每一次找到的东西 以一行来显示 [root@oldboyedu36-nb data]# [root@oldboyedu36-nb data]# egrep -o "0+" oldboy.txt 000 00000 [root@oldboyedu36-nb data]# #####+ "0+" 前一个符号/文本 连续出现1次或多次 找连续出现的东西 | |
? | 重复前面一个字符0次或1次(是有且只有一个) 前一个字符连续出现0次或1次 |
[root@oldboy36 data]# egrep "g?d" a.log | |
| | 表示或者 同时过滤多个字符 |
[root@oldboyedu-nb data]# dumpe2fs /dev/sda3 |egrep -i "inode size|inode count"
| |
() | 分组过滤被括起来的东西表示一个整体(一个字符),反向引用 |
[root@oldboy36 data]# cat a.log good glad gd god goood [root@oldboy36 data]# egrep "g(..)d" a.log good glad [root@oldboy36 data]# egrep "g(oo|la)d" a.log good glad [root@oldboy36 data]# |
本文出自 “暖心向阳” 博客,请务必保留此出处http://nuanxin.blog.51cto.com/9619425/1927045
正则表达式