正则表达式

1.1 正则表达式的基本格式

       regular expression

       作用:

              通过对文件中的内容进行过滤筛选,然后对文件的内容进行处理

              经常用基于正则写脚本来处理日志文件

       构成:

              一堆特殊符号和字母构成--元字符

1.2 正则表达式的种类

       基本正则表达式

       扩展正则表达式

1.3 正则表达式的使用

       通常会结合三个命令使用

       grep;    sed;    awk

grep命令

       作用:对文件中的内容进行逐行过滤

       格式:grep  [选项]  匹配内容  文件

       选项:

              -v:取反

              -o:仅仅显示出所匹配到的内容

              --color:将匹配到的内容着色

              -E:使用扩展正则表达式

              -i: 忽略大小写

例子:从文件a.txt中过滤出包含root的行

       # grep root a.txt

例子:从文件a.txt中过滤出不包含root的行

       # grep -v root a.txt

例子:从文件a.txt中找出全部的root(只显示root)

       # grep -o root a.txt

例子:从文件a.txt中统计root的个数

       # grep -o root a.txt | wc -l

补充:

       环境变量配置文件 ~/.bashrc

实现设置永久别名

       vim  ~/.bashrc

              添加

              alias grep="grep --color"

 

注意:

       此时,不会立刻生效(需要让系统重新取得配置文件到内存才会生效)

让系统重读配置文件的方法

       1:重启系统

       2:重启服务

       3:手动加载配置文件

手动加载配置文件

       格式:source fileName

例子:让系统读取环境变量写配置文件

       # source ~/.bashrc

通配符和正则的区别

       1. 通配符是对文件命进行匹配的;正则表达式是对文件的内容进行匹配的

       2. 正则表达式是要结合grep、sed、awk使用的

1.4 正则中的元字符

一、匹配单个字符

1). 表示任意一个字符(可以是空格,逗号, 字母, 数字..)

2)[ ] 表示范围内的一个字符

       用字母和数字的方式表示

              [12345] 表示1 或2 或3 或4 或5

              [1234567890] 表示 任意一个数字

              [abc] 表示a 或b 或c

              [a-z] 表示任意一个小写字母

              [A-Z] 表示任意一个大写字母

              [a-zA-Z] 表示任意字母

              [0-9a-zA-Z] 表示所有数字和字母的任一个

              例子:过滤出包含数字的行

                     grep [0-9] a.txt

       用字符集的方式表示

                     [:space:] 表示一个空格

                     [:digit:] 表示0-9全部十个数字

                     等价于 0123456789, 而不等价于[0123456789]

                     [[:digit:]] 表示任意一个数字

                     [:lower:] 表示全部26个小写字母

                     [:lower:] 等价于 abcdef....z

                     [[:lower:]] 表示任意一个小写字母

                     [[:upper:]] 表示任意一个大写字母

                     [[:alpha:]] 表示任意一个字母

                     [[:punct:]] 表示任意一个标点符号

                     [[:alnum:]] 表示任意一个数字和字母

       补充

              [[:digit:][:lower:]]

              [0123456789abcdefg.......z]

       例子:

              匹配空格或者数字或大写字母

                     [[:space:][:digit:][:upper:]]

3)[^]

       匹配范围以外的单个字符

       例子:匹配没有数字1或者3 或7的行

              [^137]

       例子:过滤出没有数字的行

              [^[:digit:]]

       例子:过滤出没有数字和大写字母的行

              [^[:digit:][:upper:]]

4)显示匹配到的行的前后若干行

       -A n  显示匹配行后的N行

       -B n  显示匹配行前的N行

       -C n  显示匹配行前后的各N行

       例子:从a.txt中过滤出包含数字2的行,同时显示该行下的3行内容

              # grep -A3 "2" a.txt

5)次数匹配

       *   表示其前面的字符出现任意次数的情况(0,1,n)

       .*  表示任意长度的任意字符

       ?  表示其前面的字符出现最多一次的情况

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

              \{3,\} 其前面的字符出现表最少3次

              \{,5\} 其前面的字符出现表最多5次

例子:

       a* 表示任意多个a(可是0 ,1, n)

       ab* 表示a后面的b出现任意多次

例子:过滤出包含字母a和b的行,要求a在前,b在后

       # grep "a.*b" fileName

例子:

       "a\{2,5\}b"

6)位置锚定

       ^  表示以什么为开头的行

       $  表示以什么为结尾的行

       \< 表示单词首部

       \> 表示单词尾部

       ^$ 表示空白行

例子:

       过滤出包含root的行

       # grep "root" a.txt

       过滤出以root为开头的行

       # grep "^root" a.txt

       过滤出以root为结尾的行

       # grep "root$" a.txt

       过滤出以空格为开头的行

       # grep "^[[:space:]]" a.txt

       过滤出以多个空格后面是root为开头的

       # grep "^[[:space:]]\{1,\}root" a.txt

7)分组

       \(  \)  将一个内容当做一个整体看待

       \1      表示引用前面的第一个分组

       \2      表示引用前面的第二个分组

例子: 从文件a.txt中,过滤出出现过两个相同数字的行

       # grep "\([[:digit:]]\).*\1" c.txt

1.5 扩展正则表达式

       基本正则:grep [选项] 匹配内容 文件

       扩展正则:

              方式1:grep -E 匹配内容 文件

              方式2:egrep 匹配内容 文件

主要多了两个元自符:

1.次数匹配

+:其前面的字符出现至少一次的情况效果等同于:{1,}            

例子:匹配a前有至少一个b的行

      [root@localhost tmp]# egrep "b+a" a.txt

              或者

          [root@localhost tmp]# grep -E "b+a" a.txt

        2.或

        |

       例子:从文件a.txt中过滤出cat 和Cat

       # grep -E "(c|C)at" a.txt

       或者

       # grep -E "cat|Cat" a.txt

补充:

       在基本正则表达式中,? {} () 需要在前面使用 \ 进行转义

       在扩展正则表达式中是不需要的

posted @ 2019-10-11 20:40  星月辉  阅读(624)  评论(0编辑  收藏  举报