Shell 脚本正则表达式(一)

  • Post author:
  • Post category:其他




一、正则表达式概述



1.正则表达式定义

正则表达式是使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,

简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。

正则表达式是由普通字符与元字符组成的文字模式。


  • 普通字符:

    包括那些大小写字母、苏子、标点符号以及一些其它符号。

  • 元字符:

    那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即元字符前面的字符)在目标对象中出现模式。



2.正则表达式用途

正则表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,系统管理员可以通过正则表达式快速提取”有问题”的信息。如此一来,可以将运维工作变得更加简单、方便。



二、基础正则表达式



1.基础正则表达式常见元字符

元字符 作用

^
匹配行首

$
匹配行尾

.
匹配任意一个字符

\
转义符,屏蔽一个元字符的特殊意义

*
重复零个或多个前面的单个字符

.*
匹配所有字符

[]
匹配字符集内的任意一个字符

[^]
不匹配字符集内的任意一个字符。中括号里的

^

表示取反

a\{1\}
匹配前面的

(a)

字符出现

(1)

次。若用

egrep

可以去掉斜线。

a\{1,\}
匹配前面的

(a)

字符至少出现

(1)

次。若用

egrep

可以去掉斜线。

a\{,2\}
匹配前面的

(a)

字符最多出现

(2)

次。若用

egrep

可以去掉斜线。

a\{1,2\}
匹配前面的

(a)

字符出现

(1~2)

次。若用

egrep

可以去掉斜线。



2.基础正则表达式示例

1)查找特定字符

命令 作用

-n
显示行号

-i
不区分大小写

-v
反向查找


创建测试文件

[root@localhost ~]# vim test.txt
he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
The year ahead will test our political establishment to the li
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words

#woood #
#woooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.


查找 the 并显示行号

[root@localhost ~]# grep  -n  'the' test.txt

在这里插入图片描述


查找 the 并不区分大小写

[root@localhost ~]# grep  -ni  'the' test.txt

在这里插入图片描述


反向查找不包含 the 的行

[root@localhost ~]# grep -nv 'the' test.txt

在这里插入图片描述

2)利用中括号

[ ]

来查找集合字符


  • [ ]

    :里面无论有多少字符,都代表一个字符,为



    的关系。

  • [^ ]

    :括号里面的

    ^



    取反

    的意思。


查找包含 shirt 和 short 的行

[root@localhost ~]# grep -n 'sh[io]rt' test.txt 

在这里插入图片描述


查找重复单个字符 oo 的行

[root@localhost ~]# grep -n 'oo' test.txt 

在这里插入图片描述


查找 oo 前面不是 w 的行

[root@localhost ~]# grep -n '[^w]oo' test.txt 

在这里插入图片描述


查找 oo 前面不是小写字母的行

[root@localhost ~]# grep -n '[^a-z]oo' test.txt 

在这里插入图片描述


查找 oo 前面不是大写字母的行

[root@localhost ~]# grep -n '[^A-Z]oo' test.txt

在这里插入图片描述


查找包含数字的行

[root@localhost ~]# grep -n '[0-9]' test.txt 

在这里插入图片描述

3)查找行首

^

与行尾字符

$

  • 小数点

    .

    在正则表达式中为元字符,需要使用转义字符

    \

    将其转化为普通字符。


查找以小数点


.


结尾的行

[root@localhost ~]# grep -n '\.$' test.txt 

在这里插入图片描述


查找空行

[root@localhost ~]# grep -n '^$' test.txt 

在这里插入图片描述

4)查找任意一个字符用

.

,重复字符用

*


  • *

    :表示重复零个或多个前面的单个字符。


查找以 w 开头,d 结尾共 4 个字符的行

[root@localhost ~]# grep -n 'w..d' test.txt 

在这里插入图片描述


查询至少包含两个 o 以上的字符串

[root@localhost ~]# grep -n 'ooo*' test.txt 

在这里插入图片描述


查找以 w 开头,中间至少包含一个 o 的,d 结尾的行

[root@localhost ~]# grep -n 'woo*d' test.txt 

在这里插入图片描述


查找以 w 开头,d 结尾,中间字符可有可无的行

[root@localhost ~]# grep -n 'w.*d' test.txt 

在这里插入图片描述


查询任意数字的行

[root@localhost ~]# grep -n '[0-9][0-9]*' test.txt 

在这里插入图片描述

5)查找连续字符范围

{}

  • 使用

    .



    *

    可以设置零个或无限个重复的字符。
  • 但如果要限制一个范围则使用

    {}


查看 2 个 o 的字符

[root@localhost ~]# grep -n 'o\{2\}' test.txt 

在这里插入图片描述


查看以 w 开头,d 结尾,中间为 2,5 个 o 的字符串

[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt 

在这里插入图片描述



三、扩展正则表达式



1.扩展正则表达式的常见元字符

元字符 作用

+
重复一个或者一个以上的前一个字符;等同于

a\{1,\}

?
重复零个或者一个的前一个字符;等同于

a\{,2\}


或者的意思,用或的方式查找多个符合的字符串

()
找出括号内的字符串

()+
辨别多个重复的组



2.扩展正则表达式示例

[root@localhost ~]# egrep -n 'wo+d' test.txt
执行该命令即可查询到"wood""woood""wooooood"等字符串

在这里插入图片描述

[root@localhost ~]# egrep -n 'bes?t' test.txt
执行该命令即可查询到"bet""best"这两个字符串

在这里插入图片描述

[root@localhost ~]# egrep -n 'of|is|on' test.txt
执行该命令即可查询到"of",或者"is",或者"on"字符串

在这里插入图片描述

[root@localhost ~]# egrep -n 't(a|e)st' test.txt
"tast""test"因为这两个单词的"t""st"是重复的,所以将"a""e"列入"()"符号当中,并以"|"分隔,即可查询"tast"或者"test"字符串

在这里插入图片描述

[root@localhost ~]# egrep -n 'A(xyz)+C' test.txt
该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

在这里插入图片描述



版权声明:本文为weixin_46902396原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。