正则表达式

  本人第一次写博文。由于最近刚好学到了正则表达式基本使用方法。整理了一下,以后用于回顾查找。

 

正则表达式基本说明:

 基本来说,正则表达式式一种用来描述一定数量文本的模式,正则表达式的简写为REGEX 全称Regular Express。

 

 首先正则表达式对于Linux运维工程师来说非常重要,这将伴随每一个运维工程师的职业生涯。说到正则表达式那么不得不说一下grep和egrep,grep全称是Globally search for a Regular Expression and print  out the line,表示全局搜索正则表达式并打印匹配结果的意思,好了现在让我们来一起揭开正则表达式的神秘面纱。

 

常用格式:

grep [option]  "pattern"  FILE

 

常用选项:

--color 表示匹配结果用高亮颜色显示

wKioL1bi3pqzLFj_AABSrJKkcZ0480.png


-i : 表示不区分大小写

. : (小数点)表示任意匹配任意单个字符

wKioL1bi4C7TEukhAABvCUbwO08594.png

-v:表示除显示结果以外的所有内容(上面为不加-v效果)

wKioL1bi4FTi5Q1AAABWktKadLY017.png 

-o :表示只显示匹配到的内容

wKioL1bi4MOiDZWcAABNBQXtHxM673.png

*  :表示匹配之前的字符任意次

wKioL1bi4ODxsbVtAABfDaBk84o495.png

.* :  表示匹配任意长度的任意字符

wKiom1bi4GfgyVgLAABdDTc21t0927.png

-A n:n为数字,显示匹配到的内容及其后面的n行

示例:

-A 1,如下图:

wKioL1bi4PuSXcDtAABaz4hphuU973.png

-B n :n为数字,显示匹配到的内容及其前面的n行

示例:

-B 1,如下图:

wKiom1bi4IXArETfAABaJonxK6o084.png

-C n:n为数字,显示匹配到的内容及其前后n行

示例:

-C 1,如下图:

 wKiom1bi4JHzX0cPAABfNk2lA3s995.png

正则表达式元字符:

^ :表示锚定行首,格式:

 ‘^pattern’

wKioL1bi4SSwUTKVAABH60bOUTQ699.png

$ :表示锚定行首,格式:

‘pattern$’

 wKiom1bi4KmwVaVoAAA69MmOpsg228.png

注意:特殊用法,匹配空白行为‘^$’

[ ]:表示匹配范围内的任意字符

wKiom1bi4LrQEDEOAAAtX1pAckU622.png

[^] : 表示匹配范围外任意单个内容

wKiom1bi4MfQJLSTAAA2F-V59Tw605.png

常用范围表示格式:

[0-9] : 表示所有数字等同于 [[:digit:]]

[a-z] : 表示所有小写字母等同于 [[:lower:]]

[A-Z] : 表示所有大写字母等同于 [[:upper:]]

[a-zA-Z] : 表示所有字母等同于 [[:alpha:]]

[a-zA-Z0-9] : 表示字母和数字等同于 [[:alnum:]]

[[:graph:]] : 表示非空字符(非空格、控制字符)

[[:cntrl:]] : 表示控制字符

[[:punct:]] : 表示标点符号

[[:print:]] : 表示非空字符(包含空格)

[[:space:]] : 表示空白字符

 

\? :表示匹配之前的字符0次或1次

wKiom1bi4PuwkmW4AAA1Ehs6IUI517.png

\{m,n\} :表示匹配之前的字符至少m次,最多n次

wKiom1bi4QeCaor6AAA6aev98Ck154.png

\{0,n\}:表示匹配之前的字符最多n次

wKioL1bi4ZvSBuIXAABGTtX_V7w943.png

\{m,\} :表示匹配之前的字符至少n次

wKiom1bi4SHjD4nMAAA137DFmOQ939.png

\{m\} :表示匹配之前的字符至少m次

wKiom1bi4THj_McZAAAx0x3BQYA432.png

\< :表示单词词首锚定,等同于\b的用法一样

\> :表示单词词尾锚定,等同于\b的用法一样

如:\<word\> :表示锚定单词,等同于\bword\b 个人觉得\b较简单哈哈

wKioL1bi4sehuq81AABMX9yO7NE111.png

分组与引用:

\(PATTERN\):表示将此PATTERN匹配到的字符当作一个不可侵犯的整体

\( PATTERN\).*\1 :表示引用前面分组的内容

wKiom1bi4mvDk2gZAAA_edEkhnI237.png

egrep元字符:

+ :表示匹配前面的字符至少一次

wKiom1bi4nWy_Z-NAAA75VQADjw118.png

| :管道符在这里表示|符号两边任意一边

wKiom1bi4oTT5hGlAABK9JSPkQY804.png

( | ) :带括号的

wKioL1bi4ymQ6NKQAAAzx9vyRvU376.png

?:等同于grep中的\?

wKioL1bi4zXwwfb_AAA2ehwZvVQ897.png

( ):等同于grep中的\(\)

wKioL1bi40Ch6GtSAAA9utqWF0I950.png

{ } :等同于grep中\{\}

wKiom1bi4sfDCF14AAAzgp7jsZE339.png

案例:

  1. 显示test.txt中不以cb为结尾的行

wKioL1bi41zjTRFoAAA9GahWchM472.png

2.找出test文件中的三位或四位数

wKioL1bi42ng6iysAAA6NNLvf7Q444.png

3.找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行; (最后显示内容较多,所以就截取部分)

wKiom1bi4vjSZjKDAAB9UAOiTsw442.png


4、找出"fdisk  -l“命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行;

wKioL1bi45PyAhYoAABQH5kPYP8907.png