Linux中的正则表达式

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.$
image-20241112151304312

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值