1.什么是正则表达式
- 正则表达式是为了处理大量的文字|文本|字符串而定义的一套规则和方法。
- 通过定义的这些特殊符号进行辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
- Linux正则表达式一般行为单位进行处理的。
- 简单说就是:
- 为处理大量文本|字符串而定义的一套规则和方法。
- 以行为单位出来,一次处理一行。
2.为什么要使用正则表达式
- linux运维工作 大量过滤(找东西)**日志工作。化繁为简。
- 简单,高效,易用。
- 正则表达式高级工具:三剑客 都支持。
注意事项
- 正则表达式应用非常广泛,存在于各种语言中,php perl python grep sed awk 支持。
- 但现在学的是Linux中的正则表达式,最常应用正则表达式的命令是grep(egrep)、sed、awk。–>正则表达式通常只有awk、sed、grep能使用
- 正则表达式和通配符有本质区别
3.正则表达式的分类
POSIX规范将正则表达式的分为了两种
1) 基本正则表达式(BRE,basic regular expression)
2)高级功能:扩展正则表达式(ERE,extended regular expression)
4.基本正则表达式常用符号
^ #以什么开头;"^my" 表示以my单词开头的行
$ #以什么结尾;"m$" 表示以m结尾的行
^$ #组合符号,表示空行,^$之间为空表示空行
. #匹配任意的单个字符,匹配空格,不匹配空行
\ #转义字符,让后面的一个特殊字符失效
* #匹配前一个字符(连续出现)0次或1次以上
.* #组合符号,匹配所有字符
[abc] #匹配[]内包含的任意一个字符a或b或c
[a-z] #配置[]内包含的a-z的任意一个字符
[0-9] #匹配[]内包含的0-9的任意一个数字
[^abc] #取反,表示匹配除了a b c这三个字符以外的其他字符
5.基本正则表达式
5.1 ^ Word 找以Word开头的行
[root@zkl ~]# grep '^my' zkl.txt
my qq is 123456.
my phone is 11111111111.
5.2m$ 查找文件内以m结尾的行
[root@zkl ~]# grep 'm$' zkl.txt
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
5.3查找文件的空格’ ’
[root@zkl ~]# cat -A zkl.txt #使用cat -A 在文件的末尾显示$
I am zkl!$
I teach linux.$
test123456789asd123456789$
$
I like play games,basketball,football.$
#I like Vegetables Milk$
$my blog is https:#www.zkl.com$
#baidu site is https:#www.baidu.com$
my qq is 123456.$
my phone is 11111111111.$
5.4^$ 查找并排除空行
[root@zkl ~]# grep -v '^$' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.5 . 匹配任意一个字符 不会匹配到空行
[root@zkl ~]# grep '.' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
[root@zkl ~]# grep '.' zkl.txt -o #加上 -o 查看每次匹配到什么
I
a
m
z
k
l
!
I
t
e
a
c
h
l
5.6 * 前一个字符连续出现了0次或0次以上
[root@zkl ~]# grep '1*' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.7.* 匹配所有字符
[root@zkl ~]# grep '.*' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
#贪婪匹配
[root@zkl ~]# grep '^.*m' zkl.txt
I am zkl!
I like play games,basketball,football.
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
[root@zkl ~]# grep 'm.*$' zkl.txt
I am zkl!
I like play games,basketball,football.
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.8 \ 撬棍 转义字符
[root@zkl ~]# grep '\.$' zkl.txt
I teach linux.
I like play games,basketball,football.
my qq is 123456.
my phone is 11111111111.
[root@zkl ~]# grep '.$' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
5.9[] 匹配[]内包含的任意一个字符、对特殊符号还原本意
[root@zkl ~]# grep [abc$] zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
5.10[^] 取反 匹配除了[]内的任意其他字符
[root@zkl ~]# grep [^abc] zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https:#www.zkl.com
#baidu site is https:#www.baidu.com
my qq is 123456.
my phone is 11111111111.
6.扩展正则表达式常用符号
+ #匹配前面一个字符出现1次或多次
[:/]+ #匹配前面括号内的":"或"/"字符1次或多次
? #匹配前面一个字符出现0次或1次
| #表示或者
() #分组过滤,被括起来的内容表示一个整体,另外()中的内容可以被后面的\n引用,n为数字,表示引用第几个括号中的内容
\n #n代表数字,表示引用前面第几个()中的内容,例如(abc)\1 表示匹配abcabc
a{n,m} #匹配前面一个字符最少n次,最多m次
a{n,} #匹配前面一个字符最少n次
a{,m} #匹配前面一个字符最多m次
a{n} #匹配前面一个字符刚好n次
7.扩展正则表达式
7.1 + 匹配前面一个字符出现1次或多次
[root@zkl ~]# egrep '1+' zkl.txt
test123456789asd123456789
my qq is 123456.
my phone is 11111111111.
7.2 ?匹配前面一个字符出现0次或1次
[root@zkl ~]# egrep 'a?' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https://www.zkl.com
#baidu site is https://www.baidu.com
my qq is 123456.
my phone is 11111111111.
7.3 | 或者
[root@zkl ~]# egrep 'a|b' zkl.txt
I am zkl!
I teach linux.
test123456789asd123456789
I like play games,basketball,football.
#I like Vegetables Milk
$my blog is https://www.zkl.com
#baidu site is https://www.baidu.com
[root@zkl ~]# egrep '^$|^#' zkl.txt # 匹配文件的空行和以井号开头的 经常用来过滤文件生效的行需要-v取反
#I like Vegetables Milk
#baidu site is https://www.baidu.com
7.4 {} 匹配前面一个字符最少n次,最多m次
[root@zkl ~]# egrep '1{2,3}' zkl.txt
my phone is 11111111111.
7.5() 分组过滤
[root@zkl ~]# egrep '(w)\1' zkl.txt
$my blog is https://www.zkl.com
#baidu site is https://www.baidu.com
[root@zkl ~]# egrep '(123).*\1' zkl.txt
test123456789asd123456789
1万+

被折叠的 条评论
为什么被折叠?



