linux之正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之正则表达式相关的知识,希望对你有一定的参考价值。

1、文本处理工具(grep、sed、awk)

grep:文本过滤工具(模式:pattern);

sed:stream editor,流编辑器;文本编辑器;

awk:linux上的实现为gwak,文本报告生成器(格式化文本);

以上三个工具都会用到正则表达式。


2、正则表达式:(regual expression,REGEXP):由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或统配的功能。

    正则表达式分类:基本正则表达式BRE、扩展正则表达式ERE。(二者的区别:元字符不同)

正则表达式元字符:

grep:全面搜索文件每一行并用模式(过滤条件)匹配,输出匹配行

        模式:由正则表达式的元字符及文本字符所编写出的过滤条件。

正则表达式引擎:


grep用法:

 grep [OPTIONS] PATTERN [FILE...]

 grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

OPTIONS:

--color=auto:对匹配到的文本着色高亮显示;

-i:ignorecase;忽略字符大小写;

-o:只显示匹配到的字符串本身,默认显示是匹配到的行;

-v:--invert-match;显示不能被模式匹配到的行;

-E:支持使用扩展的正则表达式;

-q:--quit,--silent;不输出任何东西

-A #:显示匹配到的后#行  after

-B #:显示匹配到的前#行  before

-C #:显示匹配到的前后#行;context


基本正则表达式元字符:(分类:字符匹配:匹配次数、位置锚定、分组及引用)

    字符匹配:

        .:匹配任意单个字符(点号)

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

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

               [ [:digit:]];[[:lower:]];[[:upper:]];[[:alpha:]];[[:alnum:]];[[:punct:]];[[:space:]]

        

 [[email protected] ~]# grep r[[:alpha:]][[:alpha:]]t /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]#


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

        *:匹配其前面的字符任意次:0,1,多次; 

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

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

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

        \{m\}:匹配其前面的字符m次;

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

        \{0,n\}:至多n次;

        \{m,\}:至少m次;

           

[[email protected] ~]# grep  ro*t /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

abrt:x:173:173::/etc/abrt:/sbin/nologin

rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin

pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin

[[email protected] ~]#


    位置锚定:

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

        $:行尾锚定:用于模式的最右侧;

        ^PATTERN$:用于PATTERN来匹配整行;

            ^$:空白行;

            ^[[:space:]]*$:空白行或包含空白字符的行;

        

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

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

                \>或\b:词尾锚定,用于单词模式的右侧;

                \<PATTERN\>:匹配完整单词;

[[email protected] ~]# grep "\<root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]# grep "\broot" /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]# grep "root\>" /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]#


[[email protected] ~]# grep "^root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

[[email protected] ~]# grep "root$" /etc/passwd

[[email protected] ~]#


    分组及引用:


如:

[[email protected] ~]# grep UUID /etc/fstab

UUID=47c2d0d2-2c32-4a36-89e7-420739594a95 /boot                   xfs     defaults        0 0

[[email protected] ~]#







以上是关于linux之正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习8之Shell编程--基础正则表达式

Linux Bash之正则表达式

Linux三剑客之grepegrep及正则表达式使用详解

linux之正则表达式

Linux 之 正则表达式实例

linux之正则表达式