!!!----本文的所有实验均是在centos 6.6平台上实现的----!!!



正则表达式

    正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。——维基百科

一、正则表达式
    1、grep  文本搜索工具 :根据用户指定的模式,对目标文件进行过滤,显示被模式匹配到的行
    grep  [选项]  模式  文件名
      -o    仅显示匹配到的内容,不会把正行输出
      -v    反向选取,把没有匹配到的行显示出来
      --color  高亮显示所匹配的内容
      -i     ignore case  不区分字符大小写
      -E  extended-regexp 使用扩展的正则表达式
      -A #:After的意思,显示匹配字符串后 # 行的数据
      -B #:before的意思,显示匹配字符串前 # 行的数据
      -C # 显示匹配字符串前后 # 行的数据
    模式(正则表达式)  
    正则表达式:由一类字符书写的模式,其中有一些字符不表示字符字面的意义,而是表示通配功能
    ①基本正则表达式(grep)

             ·元字符:
                    .   匹配任意单个字符
                    []  匹配指定集合内的任意单个字符
                    [0-9]  [[:digit:]]  数字集合
                    [a-z]  [[:lower:]]  小写字母集合
                    [A-Z]  [[:upper:]]  大写字母集合
                    [a-zA-Z]  [[:alpha:]]  大小写字母
                    [0-9a-zA-Z] [[:alnum:]] 数字和大小写字母集合
                    [[:space:]]  空白字符集合
                    [^] 匹配的是集合外的任意单个字符
            ·匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定
                    *     匹配其前面的字符任意次

 [[email protected] tmp]# cat test

xy
xxy
xxxy
y
aby
[[email protected] tmp]# grep 'x*y' test 
xy
xxy
xxxy
y
aby


                    \?    匹配其前面字符0此或一次

[[email protected] tmp]# grep --color 'x\?y' test 
xy
xxy
xxxy
y
aby

                    \+    匹配其前面字符至少出现一次

[[email protected] tmp]# grep --color 'x\+y' test 
xy
xxy
xxxy

                    \{m\} 匹配其前面字符m此

[[email protected] tmp]# grep --color 'x\{2\}y' test 
xxy
xxxy

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

[[email protected] tmp]# grep --color 'x\{1,3\}y' test 
xy
xxy
xxxy

            ·位置锚定:
                    ^:行首锚定:写在模式的最左侧                   
                    $:行尾锚定:写在模式的最右侧                   
                    ^$ :表示空白行

            ·单词锚定:由非特殊字符组成的连续的字符串       

                    \<  词首锚定   也可用\b                       
                    \>  词尾锚定   也可以用\b
                    分组\(\)

                    如'\([0-9]\) \([a-z]\) \1 \2'  

                    注:\1,\2...\n:用于表示引用前面分组的内容             
                    \|   选择字符
    2、egrep  [选项]  ‘模式’  文件名
    扩展正则表达式

            ·元字符
                .   匹配任意单个字符
                []  匹配指定集合内的任意单个字符
                    [0-9]  [[:digit:]]  数字集合
                    [a-z]  [[:lower:]]  小写字母集合
                    [A-Z]  [[:upper:]]  大写字母集合
                    [a-zA-Z]  [[:alpha:]]  大小写字母
                    [0-9a-zA-Z]   [[:alnum:]]   数字和大小写字母集合
                    [[:space:]]  空白字符集合
                    [^] 匹配的是集合外的任意单个字符
            ·匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定
                *     匹配其前面的字符任意次
                ?    匹配其前面字符0此或一次
                +    匹配其前面字符至少出现一次
               {m} 匹配其前面字符m此
               {m,n}:匹配其前面的字符至少出现m次,至多出现n次
            ·位置锚定
                ^:行首锚定:写在模式的最左侧                   
                $:行尾锚定:写在模式的最右侧                   
                ^$ :表示空白行

            ·单词锚定

                \< 词首锚定  
                \> 词尾锚定
                \<单词\>
                分组()如:'([0-9]) ([a-z]) \1 \2'
                |   选择字符


二、实例练习正则表达式

    1、显示/proc/meminfo文件中以大写或小写S开头的行;

linux正则表达式(初学者必会)

    2、显示/etc/passwd文件中其默认shell为/sbin/nologin的用户;

linux正则表达式(初学者必会)

    3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户;

linux正则表达式(初学者必会)

    4、找出/etc/passwd文件中的一位数或两位数;

linux正则表达式(初学者必会)

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

linux正则表达式(初学者必会)

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

linux正则表达式(初学者必会)

    7、找出netstat -tan命令执行结果中以'LISTEN'(后可有空白字符)结尾的行;

linux正则表达式(初学者必会)

    8、添加用户bash, testbash, basher, nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;

linux正则表达式(初学者必会)

    9、扩展题:新建一个文本文件aa,假设有如下内容:

                He like his lover.
                He love his lover.
                He like his liker.
                He love his liker.

    找出其中最后一个单词是由此前某单词加r构成的行。

linux正则表达式(初学者必会)

    练习10:显示当前系统上root、centos或user1用户的默认shell及用户名;

linux正则表达式(初学者必会)

    练习11:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;

linux正则表达式(初学者必会)

    练习12:使用echo输出一个路径,而使用egrep取出其基名;

小知识:

[[email protected] tmp]# dirname /etc/passwd #路径名的获取方式
/etc
[[email protected] tmp]# basename /etc/passwd #基名的获取方式
passwd

linux正则表达式(初学者必会)

    练习13:找出ifconfig命令结果中的1-255之间的数值;

linux正则表达式(初学者必会)

    练习14:找出ifconfig命令结果中的IP地址;ip地址范围:1.0.0.1 - 223.255.255.254

linux正则表达式(初学者必会)



多动手练习才会有更多的收获哦!

转载于:https://blog.51cto.com/meaningful/1631687

相关文章:

  • 2021-09-02
  • 2022-02-04
  • 2021-06-04
  • 2021-07-28
  • 2022-12-23
  • 2022-12-23
  • 2021-07-26
  • 2021-05-20
猜你喜欢
  • 2021-12-22
  • 2021-11-12
  • 2021-10-14
相关资源
相似解决方案