正则表达式

正则表达式:

由一类特殊字符及文本字符所编写的模式类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql等   
 

主要作用 

主要用来匹配字符串(命令结果,文本内容)

通配符只用于匹配文件名、目录名等,不能用于匹配文件内容。(而且是已存在的文件或者目录)

正则表达式是处理文件类容

通配符是用来处理文件名的

常用的通配符

* 通配符匹配任意一个或多个字符
匹配一个任意字符
[ ] [list] 匹配list中任意单个字符

1.匹配所有以*结尾的字符

2.匹配一个任意字符

 

3. [list] 匹配list中任意单个字符

基本正则表达式

元字符:

. 匹配任意单个字符,可以是一个汉字
() 使用转义符,只表示\(\)
[^]  匹配指定范围内的任意单个字符,示例:[dn]  [0-9]  []  [a-zA-Z]   [:alpha:]
[[:blank:]]  空白字符(空格和制表符)

.   匹配任意单个字符,可以是一个汉字

正则表达式_第1张图片

t\.t     加了\斜杠他就是.了    \斜杠的意思是转义转回原本的意思就是点

[ ]  匹配指定范围内的任意单个字符,示例:[dn]  [0-9]  []  [a-zA-Z]   [:alpha:]

匹配小写 [a-z]

 正则表达式_第2张图片

匹配大写 [A-Z]

正则表达式_第3张图片

匹配大小写 [ a-Z]

正则表达式_第4张图片

 [^]  匹配指定范围外的任意单个字符,示例:[^dn] [^a.z]

[^A-Z] 取反 过滤掉A-Z 其他全都要

正则表达式_第5张图片

 ‘t..t’ 点还代表仍以字符

‘r\.\.t’  加了斜杠就代表转义符  这时候点就是点了  就匹配不到了正则表达式_第6张图片

正则表达式和通配符的区别

正则表达式_第7张图片

 cat 10.txt  | grep [[:space:]] 10.txt  匹配空格正则表达式_第8张图片

 表示次数

* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符,不包括0次,也就是匹配所有
\? 匹配其前面的字符出现0次或1次,即:可有可无
\+ 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} 匹配前面的字符=n次
\{n,n\} 匹配前面的字符至少m次,至多n次
\{n\} 匹配前面的字符至多n次,<=n 
\{n,\} 匹配前面的字符至少n次

代表前面的0出现2次

代表前面出现过2次以上

代表前面出现2次以上 5次一下

 表示0次到任意次

.*匹配所有

 

 

实战练习正则表达式

1.把 ifconfig ens33 ip地址 网关 子网掩码  使用正则表达式的方式显示出来

 2.打印自己的QQ邮箱

 3.cat |/etc/fstab  把面#号空格给过滤掉 只要下面4行uuid 号正则表达式_第9张图片

位置错定

^ #行首错定,用于模式的最左侧
$ #行尾错定,用于模式的最右侧
^ roots   #用于模式匹配整行 (单独一行 只有root)
^ $  #空行

  cat /etc/fstab | grep -v "^#"  |  grep -v  "^s"

 

 分组

分组:()将多个字符捆绑在一起,当作一个整体

或者:\ |

 分组的方式 获得1和2

宽展正则表达式

grep -E 主要用于正则表达式

表示次数

* 匹配前面字符任意次
0或1次
+ 1次或多次
{n} 匹配n次
{n,n} 至少m,至多n次
{,n} 匹配前面的字符至多n次,<=n,n可以为0
{n,} 匹配前面的字符至少n次,<=n,n可以为0

使用扩展正则把 ifconfig ens33 ip地址 网关 子网掩码显示出来

把电话号码写入文本中在正则表达式写出来

 025-83346023
0510-8776655
0527-9888899

 

 使用正则表达式匹配手机号码

和上面一样  把手机号码写入文本中

 使用扩展正则表达式匹配邮箱号

方法一 cat 4.txt | grep -E "[a-Z0-9\.]@*"  这个方法可以是可以  但是不严谨

正则表达式_第10张图片

 方法二 这就是这是正确” [0-9a-zA-Z]+\.[a-z]{a-z}{,3}+“

正则表达式_第11张图片

 使用扩展正则表达式匹配

987-123-4567
987 456-1230
(123) 456-7890

 方法一  简单  但不严谨

cat 5.txt  | grep -E "[\(0-9){,3}-]"

 第二种方法 严谨  有点复杂 

grep -E "(\([0-9]+\)|[0-9]+)[ -]?[0-9]+[ -]?[0-9]+" 5.txt

 

你可能感兴趣的:(正则表达式)