第3章 正则表达式1

1.正则表达式基础

正则表达式:由一串字符和元字符构成的字符串,简称RE(Regular Expression),主要功能是文本查询和字符串操作。

元字符(metacharacters):用来阐释字符表达式意义的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。

注:a、b、2等字符属于普通字符,普通字符可以按照字面意思理解,如:a只能理解为英文的小写字母a,没有其他隐藏含义。而*、^、[]等元字符,Shell赋予了它们超越字面意思的意义,如:*符号实际上却表示了重复前面的字符0次或多次的隐藏含义。

image

上图描述了正则表达式用于数据流处理的过程,完成数据过滤,将不满足正则表达式的数据拒绝掉,剩下与正则表达式匹配的数据。

2.正则表达式中元字符集合及其意义:

符号

意义

*

0个或多个在*字符之前那个普通字符

.

匹配任意字符

^

匹配行首,或后面字符的非

$

匹配行尾

[]

匹配字符集合

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

<>

精确匹配符号

{n}

匹配前面字符出现n次

{n,}

匹配前面字符至少出现n次

{n,m}

匹配前面字符出现n次与m次之间

1 *符号

hel*o: *符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo、hello、hellllllo都可以由hel*o来表示

2 .符号

…73.表示前面三个字符为任意字符,第4和第5个字符是7和3,最后一个字符为任意字符,如xcb738、4J973U都能匹配上述字符串

3 ^符号

^cloud表示匹配以cloud开头的行

4 $符号

micky$表示匹配以micky结尾的所有行

^$ 表示空白行

5 []匹配字符

[a-]匹配所有小写字母

[^a-c]匹配不在a~c中的所有字符(^在此表示取反)

6 符号

.

7 <>符号

<the> 精确匹配单词the,them, they等不匹配

8 {}系列符号

{n}:匹配前面字符出现n次,如 JO{3}B 匹配JOOOB

{n,}:匹配前面字符至少出现n次,如JO{3,}B匹配JOOOB、JOOOOB、JOOOOOB等字符串

{n,m}:匹配前面字符出现n次与m次之间,如JO{3,6}B匹配JOOOB、JOOOOOOB等字符串

[a-z] {5}:匹配5个小写英文字母,比如hello、house等

3.正则表达式的扩展

符号

意义

?

匹配0个或1个在其之前的那个普通字符

+

匹配1个或多个在其之前的那个普通字符

()

表示一个字符集合或用在expr中

|

表示“或”意义,匹配一组可选的字符

1 ?符号

JO?B匹配O字符0次或1次,即JOOB,JOB

2 +符号

S+EU匹配S1次或任意次,如SSEU,SSSSEU。但不能SEU

3 () 和|字符

r(e|a)d表示在字符e,a选择任意一个,即red、rad

3.通配

1. 通配(globbing)是:把一个包含通配符的非具体文件名扩展到存储在计算机、服务器或者网络上的一批具体文件名的过程。

2. 最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等,通配符与元字符意义不完全相同:

  • *符号不再表示其前面字符的重复,而是表示任意位的任意字符;
  • ?字符表示一位的任意字符;
  • ^符号在通配中不代表行首,而是代表取反意义。

ls -l *.awk表示列出以.awk结尾的文件的信息;

ls -l 0?.pem表示列出以0开头、后面为一个字符且结尾为.pem的文件信息;

ls -l [a-h]*.[^awk]*表示列出以a~h开头,不以.awk结尾的文件。

原文地址:https://www.cnblogs.com/boyiliushui/p/5568409.html