grep以及正则表达式

正则表达式是基本的文本处理常识,理解和掌握好grep以及正则表达式对进行文本处理尤为重要

  1. Grep

    根据模式(文本字符和正则表达式的元字符组合而成匹配条件)搜索文本,并将符合模式的文本行显示出来。

1.1grep家族:

 grep:基本正则表达式使用的命令

 egrep:扩展正则表达式使用的命令

 fgrepfast grep):不支持正则表达式,在没有正则表达式的字符串中的使用效率非常高,cup资源消耗少

1.2grep命令格式

 grep  [options] PATTERN [FILE...]

grep以及正则表达式_linux运维

 1.2.1option

           -i忽略大小写

          --color:对匹配出来的字符加颜色

grep以及正则表达式_linux运维_02

          -v: 显示没有被模式匹配到的行

grep以及正则表达式_linux运维_03

          -o:只显示被模式匹配到的字符串

grep以及正则表达式_linux运维_04

 

       -E: 使用扩展正则表达式时候使用,grep –E=egrep

           -A #: 显示后面的行

           -B #:显示前面的行

           -C #:显示前后的行

比如:显示、/proc/cpuinfo下面的内容

grep以及正则表达式_linux运维_05

-A:

grep以及正则表达式_linux运维_06

-B:

grep以及正则表达式_linux运维_07

-C:

grep以及正则表达式_linux运维_08

2.正则表达式:REGular EXPression, REGEXP

       BasicREGEXP:基本

       ExtendedREGEXP:扩展

2.1基本正则表达式

2.1.1字符匹配

.: 匹配任意单个字符

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

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

       字符集合:[:digit:], [:lower:], [:upper:], [:punct:],[:space:], [:alpha:], [:alnum:]

grep以及正则表达式_linux运维_09

 a.b

grep以及正则表达式_linux运维_10

[]:

grep以及正则表达式_linux运维_11

[^]:

grep以及正则表达式_linux运维_12

2.1.2匹配次数(贪婪模式):

*: 匹配其前面的字符任意次

grep以及正则表达式_linux运维_13      

 .*: 任意长度的任意字符(任何以a开头和以b结尾的字符)

grep以及正则表达式_linux运维_14

\?: 匹配其前面的字符1次或0

grep以及正则表达式_linux运维_15

\{m,n\}:匹配其前面的字符至少m次,至多n次,当最多次数不限制时n可以省略,m的最小值为0而且不可以省略。

       \{1,\}:至少一次

       \{0,3\}:至多3

grep以及正则表达式_linux运维_16

2.1.3位置锚定:

^: 锚定行首,此字符后面的任意内容必须出现在行首

grep以及正则表达式_linux运维_17

$: 锚定行尾,此字符前面的任意内容必须出现在行尾

grep以及正则表达式_linux运维_18

^$: 空白行

grep以及正则表达式_linux运维_19

表示没有空白行

 

\<\b: 锚定词首,其后面的任意字符必须作为单词首部出现

grep以及正则表达式_linux运维_20

grep以及正则表达式_linux运维_21

grep以及正则表达式_linux运维_22

 

\>\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现

grep以及正则表达式_linux运维_23

grep以及正则表达式_linux运维_24

精确匹配某个单词

grep以及正则表达式_linux运维_25

grep以及正则表达式_linux运维_26

分组:

\(\)

       \(ab\)*

       后向引用

       \1: 引用第一个左括号以及与之对应的右括号所包括的所有内容

       \2: 引用第二个左括号以及与之对应的右括号所包括的所有内容

       \3: 引用第三个左括号以及与之对应的右括号所包括的所有内容


grep以及正则表达式_linux运维_27

grep以及正则表达式_linux运维_28

grep以及正则表达式_linux运维_29

grep以及正则表达式_linux运维_30


2.2拓展正则表达式

2.2.1字符匹配:(和基本正则表达式一样)

.

[]

[^]

2.2.2次数匹配:

*: (和基本正则表达式一样)

?:(和基本正则表达式少了\

+: 匹配其前面的字符至少1

下图至少匹配一个空白字符

grep以及正则表达式_linux运维_31

{m,n}(和基本正则表达式比较少了\)

2.2.3位置锚定:

^

$

\<

\>

(和基本正则表达式一样)

分组:

():分组

\1, \2, \3, ...\n

或者:

|: or

C|cat: Catcat Ccat(正确)


grep以及正则表达式_linux运维_32

grep以及正则表达式_linux运维_33

grep以及正则表达式_linux运维_34

grep以及正则表达式_linux运维_35