正则表达式基本元字符

1、字符匹配

  .:匹配单个字符    例如:~]#grep "r..t" /etc/passwd

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

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

    [:digit:] (匹配数字)

    [:lower:](匹配小写字母)

    [:upper:](匹配大写字母)

    [:alpha:](匹配所有字母) 

    [:alnum:](匹配字符和数据)

    [:punct:](匹配所有标点符号)

    [:space:](匹配空格)

    例如:~]#grep "r[[:alpha:]][[:alpha:]]t"  /etc/passwd

  

2、匹配次数:用在要指定出现次数的字符的后面,用于限时其前面的字符出现的次数。

    *:匹配其前面的字符任意次(0次,1次或无数次)  

    例如:grep "x*y"              此表达是匹配:abxy; aby; yyy; ydv;xxxxxxxxy

 

    .*:(点星)匹配任意长度的任意字符

    例如:grep "r.*" /etc/passwd 匹配结果:列出所有以r开头的所有字符串(字符串内可以包含数字)

 

    \?:匹配其前面的字符0次或1次 即:前面的字符是可有可无的

    例如:grep "x\?y"              此表达是匹配:abxy; aby; yyy; ydv;xxxxxxxxy

 

    \+:匹配其前面的字符1次或多次 即:其前面的字符至少要出现一次

    例如:grep "x\+y"              此表达是匹配:abxy; xxxxxxxxy

    

    \{m\}:匹配其前面字符m次 即:指定次数,多一次少一次都不可

    例如:grep "x\{1\}y"              此表达是匹配:abxy; xxxxxxxxy

       grep "x\{2\}y"              此表达是匹配: xxxxxxxxy

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

      \{0,n\}:匹配其前面字符至多n次

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

    例如: grep"x\{1,5\}y"   此表达是匹配:abxy;

        grep"x\{1,8\}y"   此表达是匹配:abxy;xxxxxxxxy

        grep"x\{0,8\}y"   此表达是匹配:abxy; aby; yyy;xxxxxxxxy

        grep"x\{1,\}y"   此表达是匹配:abxy; xxxxxxxxy

 

3、位置锚定

  ^:行首锚定 用于模式的最左测

  例如:grep "^root" /etc/passwd

  $:行尾锚定

  例如:grep "root$" /etc/passwd

  ^PATTERN$:用PATTERN来匹配一整行

  例如:grep "^root$" /etc/passwd 

     grep"^$" /ete/passwd  (空白行,不能由空格)

     grep"^[[:space:]]*$"(空白行,可以包含空白字符)

  单词:非特殊字符组成的连续字符(字符串)都称为单词

  \<或者\b :词首锚定,用于单词模式的左侧

  \>:词尾锚定,用于单词模式的左侧

  例如: grep "\<root" /etc/passwd   查询结果:所有以root开头的单词的一整行内容

      grep "root\>" /etc/passwd   查询结果:所有以root结尾的单词的一整行内容

      grep "\<root\>" /etc/passwd   查询结果:所有root单词的一整行内容

 

相关实践:

  1、显示/etc/passwd/ 不以/bin/bash 结尾的行

    grep  -v  "/bin/bash$" /etc/passwd

  2、找出/etc/passwd文件中的三位数或者四位数

    grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd

  3、找出/etc/grub2.cfg文件中,至少一个空白开头,结尾非空白的行

    grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

  4、找出netstat -tan 名利结果中以"LISTEN"后跟0,1或多个空白符结尾的行

    netstat -tan |grep "LISTEN[[:space:]]*$" 

 

4、分组及引用

  \{\}:将一个或多个字符捆绑在一起,当做一个整体进行处理

    \{xy\}*ab

  注意:分组括号内的模式匹配到的内容 会被正则表达式内的引擎自动记录于内部变量中,变量为:

    \1 模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符

    \2 模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符

    \3 模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符

linux 匹配以特定字符串开头的行 grep_正则表达式

 

后向引用:引用前面的括号里的模式所匹配的字符