linux之正则表达式

文件查找的需要:

grep:(GLOBAL Research) 根据模式(网)去搜索文本,而后将符合模式的文本行显示出来。

【部分匹配,显示时显示一行】

Pattern:模式。(文本字符以及正则表达式元字符组合而成的匹配条件)

例子:grep  root /etc/passwd


grep所支持的选项:

-i:忽略大小写

--color 显示颜色

alias grep=grep --color

-v: 反向查找,显示没有被模式匹配的行

-o:只显示被模式匹配出来的字符串,每个字符串显示为一行。


回顾一下 globbing(文件名通配)

* :任意长度任意字符

?:任意单个字符

[]:指定范围内的

[^]:指定范围之外的


如何写模式pattern

正则表达式 Regular EXPressionREGEXP

元字符:

. :用点表示任意单个字符

grep r..t /etc/passwd

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

[^]:匹配执行范围之外的任意单个字符

字符集合:[:digit:]  [:space::]  [::upper::]  [:lower:]  [:alpha:]  [:alnum:]


匹配次数:

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

a,b,ab,aab,acb,adb,amnbamnbamnbamnb

a*b : a出现任意次,后面跟个b

a.*b: a开头,b结束,中间跟啥都行

.* :这才表示任意长度任意字符

(正则表达式是贪婪模式,尽可能长的匹配。)

\?:表示匹配它前面的字符0次或1次。

a\?b :a出现0次或1次,后面跟个b

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

\{1,\}

\{1,3\}

grep a\{1,3\}b  test.txt

grep a.\{1,3\}b  test.txt

位置锚定:

^ :此字符后面的字符,必须出现在行首。

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

^$ : 这个表示空白行。

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

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

grep root\> test.txt

grep \<root test.txt

grep \<root\> test.txt

grep \broot\b test.txt

分组:

\(\)

\(ab\)* :ab可以出现任意次。

实现分组的目的,是后面再次引用它。

\1:调用前面第一个小括号内容

\2

\3

例子:

He love his lover

She like her liker

He like his lover

要求前后一样,匹配

l..e

grep  \(l..e\).*\1  test.txt

grep \([[:digit:]]\).*\1$ test.txt



grep -E 扩展正则表达式

-A 显示匹配行的下面的行显示

-B 显示匹配行的上面的行显示

-C 显示匹配行的上下的行显示

grep --color -B 2 ^core id /proc/cpuinfo


扩展正则表达式


字符匹配

.

[]

[^]

次数匹配

*

?:这里不用加反斜线

+ : (这个基本正则表达式没有的)匹配其前面的字符至少一次。

+? 《===*

(m,n): 扩展正则表达式不用使用转义字符


位置锚定:

^

$

\>

\<


分组:

( ) 分组

\1,\2,\3


还支持 或者

| or

C|cat  :表示C 或者cat,表示整个左边,整个右边。

grep  --color (C|c)at  test.txt


grep --color -E ^[[:space:]]+ /boot/grub/grub.conf


grep -E  =====> egrep

例子:

匹配0-255的数字。

egrep --color  \<([1-9] | [1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>  test.txt

例子:找IP地址

匹配(.)本身

\.

egrep (\<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([1-9] | [1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>test.txt


IP 地址

A1-127

B128-191

C192-223

D

E

匹配IP地址

分析:\<[1-9] | [1-9][0-9] | 1[0-9]{2} | 2[01][0-9] | 22[0-3]\>(\.\<[1-9] | [1-9][0-9] | 1[0-9]{2} | 2[01][0-9] | 22[0-4]\>){2}\.\<[1-9] | [1-9][0-9] | 1[0-9]{2} | 2[01][0-9] | 22[0-4]\>


本文出自“技术成就梦想”博客,转载请注明http://bullman.blog.51cto.com/1020988/1405969

linux之正则表达式,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。