LINUX-基础-grep及正则表达式

文本查找命令:

grep,egrep,fgerp


grep:根据模式搜索文本,并将符合模式的文本行显示出来

Pattern:文本字符和正则表达式的元字符组合而成的匹配条件


grep [option] PATTERN [FILE...]

LINUX_grep及正则表达式_字符串

上图为查找某个文件中包含root字符串的内容


grep的参数

-i:表示忽略大小写

LINUX_grep及正则表达式_LINUX_02

上图中忽略了h字母的大小写


--color:匹配到的选项用高亮进行标注显示

LINUX_grep及正则表达式_字符串_03


-v:反向查找,被匹配到的行不显示,没有匹配到的行则显示

LINUX_grep及正则表达式_字符串_04


-o:只显示被匹配到的字符串,每一个串显示一行

LINUX_grep及正则表达式_正则表达式_05


-w:绝对匹配

LINUX_grep及正则表达式_LINUX_06

@@@@@@@@@@@

下面为通配符中的定义:

*:任意长度的任意字符

?:任意单个字符

[] :指定范围内

[^]:指定范围外

这些定义在元字符中有了改变,注意区分

@@@@@@@@@@@


正则表达式:regular expression


元字符:

.:任意单个字符

LINUX_grep及正则表达式_字符串_07

上图表示在r和t之间任意两个单字符,所有途中的r/ft也匹配到了。

[]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

LINUX_grep及正则表达式_LINUX_08

上面的字符集合分别对应:数字 小写字母 大写字母 标点符号 空白字符 所有字母 所有数字和字符,上面这些引用的时候还需要在加[]进行使用,两个[]

字符个数

LINUX_grep及正则表达式_字符串_09

*:匹配其前面的字符任意次

比如上图所示,a*b的意思为b前面存在任意个数的a的情况(而不是a和b之间可以有任意字符,a和b之间可以有任何字符是通配符的表示方式,不是元字符的表示方式),也就是能够匹配前面0个a,b;前面1个a,ab;前面2个a,aab;等形式,所以除了第一个a和最后三个之外,其他的都能够匹配到。

LINUX_grep及正则表达式_正则表达式_10

LINUX_grep及正则表达式_字符串_11LINUX_grep及正则表达式_LINUX_12

全部红色的才是匹配成功的


.* :表示任意长度的任意字符,贪婪模式,尽可能长的去匹配

LINUX_grep及正则表达式_正则表达式_13

上图的a.*b表示a开头,b结束,中间任意字符

LINUX_grep及正则表达式_LINUX_14

LINUX_grep及正则表达式_LINUX_15

LINUX_grep及正则表达式_字符串_16

无法匹配到ssaddb


可以理解为*前面第二位和后面的值是定死的,必须存在,而*前面第一位的字符可以是任意个数,可以为0个。

\?:匹配其前面的字符1次或0次

LINUX_grep及正则表达式_LINUX_17

aab不能被完全匹配


\{m,n\}:匹配其前面的字符至少m次,之多n次

LINUX_grep及正则表达式_LINUX_18

\{1,\}:表示至少一次,最多不限

LINUX_grep及正则表达式_LINUX_19

上图表示a和b之间可以出现至少1个至多3个字符


位置锚定:

^:锚定行首,此字符后面的任意内容必须出现在行首

LINUX_grep及正则表达式_LINUX_20


$:锚定行尾。此字符前面的任意内容必须出现在行尾

LINUX_grep及正则表达式_正则表达式_21


^$:空白行

LINUX_grep及正则表达式_字符串_22


^#$:表示匹配以#开头,中间为空内容的行

LINUX_grep及正则表达式_字符串_23

LINUX_grep及正则表达式_LINUX_24


上图表示匹配以一个空白字符一个数字结尾的内容


\<或者\b:锚定词首,其后面的任意字符必须作为单词首部出现

LINUX_grep及正则表达式_LINUX_25


\>或者\b:锚定词尾,其前面的任意字符必须作为单词尾部出现

LINUX_grep及正则表达式_LINUX_26

.不算做单词一部分的尾部


\<root\>:精确匹配root单词

LINUX_grep及正则表达式_LINUX_27


分组:

\(\)

        \(ab\)*:这样表示ab可以出现0次或任意次,后向引用

LINUX_grep及正则表达式_正则表达式_28

LINUX_grep及正则表达式_正则表达式_29