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

文本查找命令:

grep,egrep,fgerp


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

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


grep [option] PATTERN [FILE...]

wKioL1Xj7UDhoVyRAACOcw3ADHE244.jpg

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


grep的参数

-i:表示忽略大小写

wKiom1Xj6zyy6jqBAABm8kRafNg389.jpg

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


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

wKioL1Xj7XGiFitWAABTXlpCTfM515.jpg


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

wKiom1Xj63rAZQpQAACEGSi4sQQ939.jpg


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

wKioL1Xj7a7ixbMnAAAyIQW7qGk278.jpg


-w:绝对匹配

wKioL1Xj7iXjcFiNAABvnuiqbNE955.jpg

@@@@@@@@@@@

下面为通配符中的定义:

*:任意长度的任意字符

?:任意单个字符

[] :指定范围内

[^]:指定范围外

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

@@@@@@@@@@@


正则表达式:regular expression


元字符:

.:任意单个字符

wKioL1Xj7fPANffWAABumn3tNUk277.jpg

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

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

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

wKiom1Xj7BzDle7ZAABHZ8VxKzI874.jpg

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

字符个数

wKioL1Xj7lmAN1lwAAAW30Tnrvo806.jpg

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

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

wKiom1Xj7Dqyo_ReAAAvWfI35y8982.jpg

wKioL1Xj7lngc8UpAAA2uSORtDs577.jpgwKioL1Xj7lnxHs4PAAA73ZQ-UOM665.jpg

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


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

wKiom1Xj7Kewebq6AAAozLx8awQ722.jpg

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

wKioL1Xj7sbx4QAiAABD_Un1dIs586.jpg

wKioL1Xj7wPS2Z5tAAA5k5uJqFs029.jpg

wKioL1Xj7wPRrmmaAAA10MpDN5E049.jpg

无法匹配到ssaddb


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

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

wKiom1Xj7OSg-zO4AAAu8d9TsLU451.jpg

aab不能被完全匹配


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

wKiom1Xj7Qai1Tv2AAA-fbZ0aoo587.jpg

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

wKioL1Xj7yXju-ABAAAyykj9R2s186.jpg

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


位置锚定:

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

wKiom1Xj7QfhhxvrAACfJsdl_JI670.jpg


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

wKioL1Xj7yWh6--qAAB2LIMHnx4400.jpg


^$:空白行

wKiom1Xj7QeCOcmIAAAkI8EWw7w770.jpg


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

wKioL1Xj76Pibc9eAACXRsMUjzU597.jpg

wKiom1Xj7YXB1xXwAABOqsRxEa8379.jpg


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


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

wKioL1Xj76OiEU4xAAB3xBhZMKE966.jpg


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

wKiom1Xj7YXjb0njAABuolUSoxE102.jpg

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


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

wKioL1Xj76PyYnFNAAAzzT2M6gM593.jpg


分组:

\(\)

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

wKioL1Xj8GrQqNReAABBQTauFIA669.jpg

wKiom1Xj7kzzeMXgAACNUV6sSWA126.jpg