shell正则表达式

什么是正则表达式?

正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串。

为什么要学正则表达式?

在企业工作中,我们每天做的linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的特定的字符串。这就要靠正则表达式。因此,可以说正则表达式就是为过滤字符的需求而生的!
例如:ifconfig的输出取IP,例如:cat /var/log/messages输出等

两个注意事项:

正则表达式应用非常广泛,存在于各种语言中,例如:php、python、java等。但是我们今天讲的linux系统运维工作中的正则表达式,即linux正则表达式,最常用正则表达式的命令就是grep(egrep)、sed、awk,换句话说linux四剑客剑客要想工作的各高效,那一定离不开正则表达式配合的。

正则表达式和我们常用的通配符特殊字符是用本质去别的,这一点要注意。通配符例子:ls .log**这里的就是通配符(表示所有),不是正则表达式

Shell 正则表达式分为两种:

  • 基础正则表达式:BRE(basic regular express)
  • 扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和()

下面是一些常用的正则表达式符号

正则表达式	描述
\	转义符,将特殊字符进行转义,忽略其特殊意义
^	匹配行首,awk中,^则是匹配字符串的开始
$	匹配行尾,awk中,$则是匹配字符串的结尾
.	匹配除换行符\n之外的任意单个字符,awk则中可以
[]	匹配包含在[字符]之中的任意一个字符
[^ ]	匹配[^字符]之外的任意一个字符
[1]	匹配不是中括号内任意一个字符开头的行
[ - ]	匹配[]中指定范围内的任意一个字符,要写成递增
?	匹配之前的项1次或者0次
+	匹配之前的项1次或者多次
*	匹配之前的项0次或者多次
()	匹配表达式,创建一个用于匹配的子串
{ n }	匹配之前的项n次,n是可以为0的正整数
{n,}	之前的项至少需要匹配n次
{n,m}	指定之前的项至少匹配n次,最多匹配m次,n<=m
|	交替匹配|两边的任意一项
<	边界符,匹配字符串开始
>	边界符,匹配字符串结束

在Shell下使用这些正则表达式处理文本最多的命令有下面几个工具:

命令	描述
grep	默认不支持扩展表达式,加-E选项开启ERE。如果不加-E使用花括号要加转义符{}
egrep	支持基础和扩展表达式
awk	支持egrep所有的正则表达式
sed	默认不支持扩展表达式,加-r选项开启ERE。如果不加-r使用花括号要加转义符{}

参考:https://www.cnblogs.com/passzhang/p/11664218.html

posted @ 2020-07-13 17:16  月夜星光  阅读(443)  评论(0编辑  收藏  举报