Linux教程

Linux正则表达式

本文主要是介绍Linux正则表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

正则表达式

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符) 不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配 符功能是用来处理文件名,而正则表达式是处理文本内容中字符

 

正则表达式分为两类

  基本正则表达式

  扩展正则表达式

1、基本正则表达式元字符

1.1字符匹配

常用
.       匹配任意单个字符,可以是一个汉字
[]      匹配指定范围内的任意单个字符,示例:[abcd]   [0-9]   [a-z]   [a-zA-Z]
[^]     匹配指定范围外的任意单个字符,示例:[^abcd]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围
广

拓展
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
[:blank:] 空白字符(空格和制表符)

\w   #匹配单词构成部分,等价于[_[:alnum:]]
\W   #匹配非单词构成部分,等价于[^_[:alnum:]]
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
Unicode 正则表达式会匹配全角空格符

1.2匹配次数

  用在要指定次数的字符后面,用于指定前面的字符要出现的次数

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

1.3位置锚定

  位置锚定可以用于定位出现的位置

^                #行首锚定, 用于模式的最左侧
$               #行尾锚定,用于模式的最右侧
^PATTERN$       #用于模式匹配整行
^$            #空行
^[[:space:]]*$     #空白行
\< 或 \b         #词首锚定,用于单词模式的左侧
\> 或 \b           #词尾锚定,用于单词模式的右侧
\<PATTERN\>        #匹配整个单词


#注意: 单词是由字母,数字,下划线组成    

1.4分组其他

\(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2



a\|b       #a或b  
C\|cat     #C或cat  
\(C\|c\)at   #Cat或cat

 

2、扩展正则表达式原子符

  2.1字符匹配

.                   任意单个字符
[abcd]               指定范围的字符
[^abcd]               不在指定范围的字符
[:alnum:]             字母和数字
[:alpha:]             代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]             小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:]             大写字母
[:blank:]             空白字符(空格和制表符)
[:space:]             水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:]             不可打印的控制字符(退格、删除、警铃...)
[:digit:]             十进制数字
[:xdigit:]            十六进制数字
[:graph:]             可打印的非空白字符
[:print:]             可打印字符
[:punct:]             标点符号

2.2次数匹配

*           匹配前面字符任意次
?           0或1次
+           1次或多次
{n}         匹配n次
{m,n}        至少m,至多n次

2.3位置锚定

^             行首
$             行尾
\<, \b         语首
\>, \b         语尾

2.4

分组其他

()            分组
后向引用:\1, \2, ...
|              或者
a|b            #a或b
C|cat           #C或cat
(C|c)at         #Cat或cat

 

grep -E 配合扩展正则表达式使用,对文本内容过滤筛选显示

[15:19:09 root@centos8 ~]#ifconfig ens160 | grep netmask | grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | head -n1

192.168.1.85

[15:19:20 root@centos8 ~]#

 

这篇关于Linux正则表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!