什么是正则表达式

     正则表达式是一种匹配模式,通过这种模式能够定位到文本文件的文本行。

2 为什么要使用正则表达式

     正则表达式在要编辑文本文件时能够快速定位到你想要找到的那行文本,而不用慢慢翻屏一页一页的找。

3 正则表达式的使用场合

     用于搜索文本文件的内容,不要与使用通配符的查找文件名混淆。

4 正则表达式的使用

      grep 用于基本正则表达式

      egrep 用于扩展的正则表达式

      grep–E = egrep

命令格式为:

grep[OPTIONS] PATTERN [FILE...]

OPTIONS:

   -i: 忽略字符大小写

   -o:只显示匹配到的内容,而不是显示整行内容

   -v:显示匹配行之外的文本行

  

PATTERN

基本正则表达式

元字符:

.:匹配任意单个字符

[ ]:匹配括号中的任意一个字符

    例子:[a-z]表示a-z中的任意一个字符

    注意:字母区分大小写

[^]:匹配括号外的任意一个字符

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

[[:lower:]]:代表小写字母

[[:upper:]]:代表大写字母

[[:alpha:]]:代表大小写字母

[[:digit:]]:代表数字

[[:alnum:]]:代表数字与字母

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

位置锚定:

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

   例子:^root 表示以字符r开头

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

   例子:root$ 表示以字符t结尾

^$:空白行

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

例子:”\<root” 表示以root作为单词的首部

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

匹配次数:

*:表示匹配其前面出现的字符任意次(可以为0次)

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

\?:表示匹配其前面出现的字符0次或1次

例子:as\? 表示s字符可以不出现或出现一次,即a,as都匹配

\+:表示匹配其前面出现的字符至少一次

\{m,n\}:表示匹配其前面出现的字符最少m次,最多n次

   例子:as\{0,3\} 表示s字符最多出现3次

      注意:若中括号内只有一个数字,则表示精确匹配

\(\):做后项应用,与\#一起使用

   \#:表示引用其前第#个左小括号与其右括号之间的内容

例子:\(l..k\).*\1

     ..代表任意两个字符,后面引用的必须与前面..的内容一致

    Helove his lover.  正确  ..都是ov

    Shelike her liker. 正确

    Helike his lover.  错误


例子:/etc/inittab文件中以#开头后跟至少一个空白字符最后以conf结尾的行 

grep"^#[[:space:]]\+.*conf$" /etc/inittab

 

例子:/etc/inittab以一个两个字符的单词开头后面有个标点再接一个数字后接一个与前面一样的标点。

grep"^\<[[:alnum:]]\{2\}\([[:punct:]]\)[[:digit:]]\1.*" /etc/inittab


扩展的正则表达式

元字符与基本正则表达式一样

匹配次数:

*:表示匹配其前面出现的字符任意次(可以为0次)

?:表示匹配其前面出现的字符0次或1次

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

{m,n}:表示匹配其前面出现的字符最少m次,最多n次

():做后项应用,与\#一起使用

   \#:表示引用其前第#个左小括号与其右括号之间的内容

位置锚定:

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

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

^$:空白行

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

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

或者:

   |:完整的匹配|左边或者右边的内容

例子:写一个模式,能匹配合理的IP地址;1.0.0.1 -- 239.255.255.255

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