grep+正则表达式实例讲解

一.相关介绍git

1)正则表达式:正则表达式

正则表达式就是处理字符串的方法,它是以单位来进行字符串的处理行为,正则表达式经过一些特殊符号的辅助,能够让用户轻易达到查找,删除,替换某特定字符串的处理程序,正则表达式的做用就是让咱们在编辑、处理文本文件的时候飞起来shell

注:书写正则表达式的时候,你要熟悉文件的内容。正则表达式的书写答案并不惟一;而且一个正则表达式并不适合全部的文件,有时是不可能一次就把答案写出来的,须要反复的修正。bash

(2) 文件类型ide

   - 普通文件ui

   d 目录文件spa

   b 设备块文件3d

   c 字符型文件blog

   l 软连接(符号连接)文件递归

   p 管道文件

S 套接字文件

3bash通配符

[:alnum:] 字母+数字

[:alpha:] 字母

[:lower:] 小写字母

[:upper:] 大写字母

[:digit:] 十进制数

[:punct:] 符号

[:space:] 空白字符(空格 “tab”

[[:alnum:]] 任意的一个字母或数字[a-Z0-9]

[^[:alnum:]] 取反

取反[[:alnum:]!]


二.正则表达式+grep

  1.元字符列表:

    (1 ^               //行首定位符

2$               //行尾定位符

    (3.               // 任意的单个字符,可是换行符

    (4*              //匹配0个或多个它的前一个字符

    (5[]             //匹配[] 包含的一组字符中的一个

    (6\              //转义符,去掉特殊符号的意义

    (7\{m\}          //前面的x出现m

                \{m,\}          //前面的x出现 >= m

         \{m,n\}         //前面的x出现 m~n

8\(\)            //标签

    (9\<            //词首定位符

                  \>            // \> 词尾定位符

注:如下截图有的为部分截图

1. ^  行首定位符

(1)[root@tx3 ~]# grep ^root /etc/passwd

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

(2)对结果就行取反(第三部分会对grep命令进行详细介绍

[root@tx3 ~]# grep -v  ^root /etc/passwd

(3)列出行号

2.  $行尾定位符

[root@tx3 ~]# grep  bash$ /etc/passwd

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

tx:x:500:500:tx:/home/tx:/bin/bash


3.   .意的单个字符,可是换行符出外

1rt之间匹配两个字符

4.  * 匹配0个或多个它的前一个字符

注   .*  匹配全部

5. []  匹配[] 包含的一组字符中的一个

   [abc]  中的一个

     支持“-”的连字符

   [0-9] 任意的数字

   [a-z] 任意的小写字母

   [A-Z] 任意的大写字母

   [a-Z] 任意字母

   [a-Z0-9] 任意的字母或数字


取反  [^  ]

   [^0-9] 任意的非数字

   [^a-z] 任意的非小写字母

   [^A-Z]

   [^a-Z]

[^a-Z0-9] 任意的符号


1找出uid2位数的行:


(2)匹配第1个字段是4个字符的行,两种方法

6. \ 转义字符:屏蔽元字符的含义


7.   x\{m\}   :前面的x出现m

        x\{m,\}  :前面的x出现 >= m

        x\{m,n\} :前面的x出现 m~n

(1)上面的匹配第1个字段是4个字符的行,用这种方法作

[root@tx3 ~]# grep "^[^:]\{4\}:" /etc/passwd

[root@tx3 ~]# grep "^[a-Z]\{4\}:" /etc/passwd

2


8.   \(\)标签,保存包起来的字符,后面能够调用。最多能用9

如何调用?-------->从左向右依次的顺序是1-9

   \1   \2


[root@tx3 ~]# grep "root.*root.*root" /etc/passwd

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

[root@tx3 ~]# grep "\(root\).*\1.*\1" /etc/passwd

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

9.\< 词首定位符 \> 词尾定位符

单词:  连续的字母或数字


三. 扩展正则表达式

      ?              //匹配前面的字符有0个或1

       +            //前面的字符有1个或多个

       |             //

()            //找出组字符串

()+            //多个组的判别

注:具体实例会结合egrep给出


四. grep家族(grepegrepfgrep)命令相关介绍

1.  grep命令中输入字符串参数时,最好将其用双引号括起来。这样作有两个缘由,一个是防止被误会是shell命令,是能够用来查找多个单词组成的字符串

    几个经常使用的选项:(为节省空间这里只粘取一行)

1-n 显示匹配行的行号

[root@tx3 ~]# grep -n "root" /etc/passwd

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

(2)-v 匹配内容取反

[root@tx3 ~]# grep -v "root" /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

(3)-r 递归搜索

[root@tx3 ~]# grep -r "root" /etc/

4-l 递归搜索时只显示文件名

[root@t1 123]# grep -hr "root" /etc


(5)-h 递归搜索时只显示匹配行

[root@tx3 ~]# grep -hr "root" /etc/

(6)-c 统计匹配的行数

[root@tx3 ~]# grep -c "root" /etc/passwd

2

7-i 匹配的内容不区分大小写

[root@tx3 ~]# grep -i "root" /etc/passwd

   (8显示匹配行以及它周围的行

   -Anum after  

   -Bnum before  

   -Cnum 上下

(9) -E 至关于egrep能够接扩展正则表达式

2.  Egrep

egrep命令能够接扩展的正则表达式(可参照grep


3. fgrep

 fgrep命令是用来查找一个或多个与给出的字符串或词组相匹配文件中的行。fgrep 查询速度比grep命令快,可是不够灵活:它只能找固定的文本,它不识别正则表达式,是快速搜索命令。(参数可参照grep


1.  ?匹配一个前面数字是2(.须要转义)

2.  + 前面的字符有1个或多个  

3.  |

4.   ()找出组字符串

1

2)能够用{m}{m,}{m,n}匹配个数

5. 多个组的判别

6.   fgrep不支持正则表达式


相关文章
相关标签/搜索