正则表达式

  1. 正则表达式就是为处理大量的字符串及文本而定义的一套规则和方法。

  2. 其工作以行为单位进行,即一次处理一行

  3. 通过正则表达式可以将复杂的处理任务化繁为简,提高操作Linux的效率

  4. 仅被三剑客(grep/egrep、sed、awk)命令支持,其他命令无法使用

一、Linux三剑客的正则表达式分为两类,即:

(1)基本正则表达式(BRE)

  • BRE对应的元字符有“^$.[]*”

(2)扩展正则表达式(ERE)

  • ERE在BRE的基础上增加了“(){}?+|”等字符

二、基础正则表达式:

【参数】

字符

作用

^

尖角号,用法为^ql,表示匹配以ql单词开头的行

$

美元符,用法ql$,表示匹配以ql单词结尾的行

^$

组合符,表示空行,逻辑解释就是以^结尾的行,或者以$开头的行

.

点号,表示匹配任意一个且只有一个字符(但是不能匹配空行)

\

转义字符,让特殊含义的字符脱掉马甲,现出圆形,如\.只表示小数点

*

匹配前一个字符(连续出现)0次或1次以上

注意,当重复0次的时候,表示啥也没有(空),即匹配所有内容

.*

组合符,匹配所有内容

^.*

组合符,匹配以任意多个字符开头的内容

.*$

组合符,以任意多个字符结尾的内容

[abc]

匹配[]集合内的任意一个字符a或b或c;[abc]也可写成[a-c]

[^abc]

匹配不包括^后的任意字符a或b或c,这里的^表示对[abc]的取反,^不能用!代替

1、^ 尖角号,用法为^ql,表示匹配以ql单词开头的行

(1)过滤出I开头的行

(2)过滤出家目录以d开头的行

2、$美元符,用法ql$,表示匹配以ql单词结尾的行

(1)过滤出m结尾的行

(2)过滤出/结尾的行

3、^$ 组合符,表示空行,逻辑解释就是以^结尾的行,或者以$开头的行

4、.    点号,表示匹配任意一个且只有一个字符(但是不能匹配空行)

5、\转义字符,让有特殊含义的字符脱掉马甲,现出圆形,如\.只表示小数点

6、*匹配前一个字符(连续出现)0次或1次以上

(1).* 组合符,匹配所有内容

(2)^.*组合符,匹配以任意多个字符开头的内容

(3).*$组合符,以任意多个字符结尾的内容

7、[abc]        匹配[ ]集合内的任意一个字符a或b或c;[abc]也可写成[a-c]

8、[^abc]        匹配包含^后的任意字符a或b或c,这里的^表示对[abc]的取反,^不能用!代替

测试题:

1、过滤/etc/passwd中以nologin结尾的行

grep "nologin$" /etc/passwd

2、过滤/etc/passwd中以o开头的行

grep "^o" /etc/passwd

3、过滤/etc/passwd中至少含有1个0字符串的行

grep "00*" /etc/passwd

4、过滤/etc/passwd中的空行

grep "^$" /etc/passwd

5、过滤/etc/目录中(不含子目录)下的所有文件

ls -l /etc/|grep "^-"

6、过滤/etc/services中含有点号的行

grep "\." /etc/services

三、扩展正则表达式

字符
作用
+
匹配前一个字符1次或多次
[:/]+
匹配括号类的:或/字符1次或多次
?
匹配前一个字符0次或1次
|
表示或者,即同时过滤多个字符串
()
分组过滤被括起来的东西表示一个整体,另外()的内容可以被后面的\n应用,n为数字,表示应用第几个括号的内容
\n
应用前面()小括号里的内容,例如:(aa)\1,匹配aaaa
a{n,m}
匹配前一个字符最少n次,最多m次
a{n,}
匹配前一个字符最少n次
a{n}
匹配前一个字符正好n次
a{,m}
匹配前一个字符最多m次

练习:

1、+    匹配前一个字符1次或多次(和*区别,*可以匹配0次)
(1)grep "0*" ql.txt(匹配0个0,或1个0,或多个0)
(2)egrep "0+" ql.txt(匹配1个0或多个0,egrep=grep -E)
2、[:/+]    匹配括号类的:或/字符1次或多次
3、?    匹配前一个字符0次或1次

4、|    表示或者,即同时过滤多个字符串
5、()分组过滤被括起来的东西表示一个整体,另外()的内容可以被后面的\n应用,n为数字,表示应用第几个括号的内容
(1)\1可以取出第1个括号的内容
(2)\2可以取出第2个括号的内容

测试题

1、过滤/etc/passwd中含有root或ql的行
egrep "root|ql" /etc/passwd
2、过滤/etc/passwd中至少含有1个0字符串的行
egrep "0+" /etc/passwd
3、过滤/etc/passwd中匹配o字符0次或1次的行
 egrep "o?" /etc/passwd
4、过滤/etc/passwd中匹配0字符1次到3次的行
egrep "0{1,3}" /etc/passwd
5、过滤/etc/passwd中匹配含有连续多个冒号或斜线的行
egrep  "[:/]+" /etc/shadow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值