Linux 之正则表达式

1:什么是正则表达式?

   正则表达式是通过一些特殊的符号辅助,可以让用户轻易达到处理字符串的目的。里面的字符不代表其字面意义,而是用于额外的功能描述,我们称此类字符为“元字符”。


2:正则表达式可以作用在那些方面?

   正则表达式可以在文本处理方面起到查找,删除,替换等重要作用,可以提高文本处理的效率,对于一个系统管理员是多么的重要。


3:正则表达式种类?

   基本正则表达式grep;扩展正则表达式额grep或grep -E;快速正则表达式fgrep.


4:正则表达式是通过一些特殊的符号辅助来进行文本处理的,这些文本文件我们称为“元字符”。下面介绍一基本正则表达式“元字符”种类。

   1)字符匹配类

      . :匹配任意一个单个字符。

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

      [^]:匹配指定范围内以外的任意字符(取反)

      [0-9],[[:digit:]]:任意数字

      [a-z],[[:lower:]]:任意小写字母

      [A-Z],[[:upper:]]:任意大写字母

      [[:punct:]]:任意符号

      [[:alnum:]]:数字和字母

      [[:alpha:]]:任意大小写字母

      [[:space:]]:任意空字符

   2)次数匹配类

      * :任意长度他前面的字符可以出现任意次

      .*:任意长度的任意字符

      \?:他前面的字符可以出现0次或1次。

      \{m,n\}:前面的字符至少出现m次至多出现n次

      \{m,\}:前面的字符至少出现m次

      \{0,n\}:前面的字符至多出现n次

   3)字符锚定类

      ^ : 行首锚定

      $ : 行尾锚定

      \<或\b: 词首锚定

      \>或\b: 词尾锚定

   4) 分组

     \(ab \(c\)de\)

      对应括号为一组,自左至右的左括号与之对应的右括号,上面abcde为对应的1号括号内的内容,c为对应的2号括号内的内容。


5:正则表达式的用法?

   语法格式:grep [option]....'PATTERN' file....

   命令选项: -v 反向选取

    【例1】 显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户 wKiom1O87CaBEOgiAAEPzujVBHo114.jpg


  -o 仅显示匹配到的子串而非子串所在行

    【例2】 显示/etc/passwd文件中显示root的子串

wKioL1O87PyiyDUAAACL-AA1WtE177.jpg

       

  -i 忽略匹配到的字符大小写

    【例3】 显示/proc/meminfo文件中以大写或小写S开头的行

wKioL1O87kCBbmewAADNRC8RkT8218.jpg

    文本搜索条件里是小s搜索结果出现了大S,说明搜索时忽略了大小写。


 -n 显示所匹配的内容在文件的第几行

    【例4】题目如上要显示出满足条件的行号

wKiom1O872-gcYTrAADNNAAb5AU115.jpg


 6: 对于正则表达式的一些练习。

   1)显示/etc/passwd文件中其默认shell为/bin/bash的用户;并显示上述结果中其ID号最大的用户

   2)找出/etc/passwd文件中的一位数或两位数

   3)显示/boot/grub/grub.conf中以至少一个空白字符开头的行

   4)显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行

      你懂的:

    1)grep "/bin/bash$" /etc/passwd |sort -t: -k3 -n|cut -d: -f1|tail -1

    2)grep "\b[[:digit:]]\{1,2\}\b" /etc/passwd

    3)grep "^[[:space:]]\{1,\}.*" /boot/grub/grub.conf

    4)grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit



7:扩展正则表达式

   扩展正则表达式在用法上和基本正则表达式大致相同,在“元字符”写法上有些区别,下面介绍下有区别的扩展正则表达式的”元字符“,其他的同上扩展正则表达式。

  

  1)字符类:同上

  2)次数匹配类

      * :任意长度他前面的字符可以出现任意次

      .*:任意长度的任意字符

      ?:他前面的字符可以出现0次或1次。

      {m,n}:前面的字符至少出现m次至多出现n次

      {m, }:前面的字符至少出现m次

      {0,n}:前面的字符至多出现n次

      {m}:精确匹配m次

 3)锚定类:同上

  4)分组类:同上

  5)或者类

       a|b : a或者b

        abc|Cba: “|”线两边各为一个整体,意思是:abc或者Cba.

        ab(c|C)ba: “|”意思是abcba或者abCba.


8:对于扩展正则表达式的一些练习

   1)显示当前系统上root、fedora或user1用户的默认shell;

   2)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行

   3)使用echo命令输出一个路径,而后使用grep取出其基名

   

   1)egrep "root|fedora|user1" /etc/passwd | cut -d: -f7

   2)egrep -o "\b[[:alpha:]]+\b\(\)" /etc/rc.d/init.d/functions     


notice

   正则表达式匹配内容的次数是用大括号括起来的。\{n,m\}

   正则表达式“元字符”与“通配符”的区别 




你可能感兴趣的:(linux,基本正则表达式,扩展正则表达式)