基本正则表达式

在学习正则表达式时,先了解一些基本命令和一些linux中常用shell的通配符,

Grep命令就是我们要了解的命令。

Grep :根据模式搜索文本,并将符合模式的文本行显示出来。(显示的是匹配字符所在的行)

所谓模式就是文本字符和正则表达式的元字符组合而成匹配条件,模式也可以是文本字符。

Grep的格式:

grep [选项模式 目标

选项:

     --color:将匹配模式的字符用颜色显示出来

     -i:查找时忽略字符大小写

     -v:被模式匹配的行不显示,只显示没有被模式匹配的行

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

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

  -A [0-9]:显示被匹配到的行,并显示其行的后几行

  -B:显示被匹配到的行,并显示其行的前几行

  -C:显示被匹配到的行,显示前后个几行

通配符:是为了方便用户用来查找某些符合特定字符或模式的文件

一些基本的通配符有:

*:表示任意长度的任意字符    比如:a*b  表示ab之间的任意长度的任意字符,任意长度也可以表示没有,如abacba123456b

?:表示任意一个字符,只能有一个字符   比如:a?b  表示ab之间只有一个字符,如acba3baxb

[]:表示指定范围内的字符   比如:a[xy12]b   ab之间必须也只能有一个字符但只能是 或 或 12 如: axbaybazba1ba2b   如果是这样a[0-9]b则表示:ab之间可以是0-9的任意某个字符比如 a1ba2ba3b

[^]:表示除了指定范围内的其他任意一个字符    比如a[^0]b  表示除了a0b 其他的都可以如a1b acb

    [:space:]空白字符

    [:punct:]标点符号

    [:lower:]小写字母

    [:upper:]大写字母

    [:alpha:]大小写字母

    [:digit:]数字

    [:alnum:]数字和大小写字母

在正则表达式中通配符的用方法不在是以前所表达的意思了,而又换了一种含义,所以要想明白正则表达式的用法,先区分shell的通配符和正则表达式元字符的不同之处。

正则表达式的元字符:

.:表示任意单个字符

[]:表示指定范围内的任意单个字符

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

*:匹配其前面的字符任意次,也可以是0次  

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

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

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

      a\{1,\}:表示a至少出现1次,至多不限

      a\{0,3\}:表示a可以不出现,出现时至多3

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

$:用于锚定行尾,表示此字符后面的任意内容必须出现在行尾

^$:表示空白行

\<\b:锚定词首,其后面的任意字符必须作为单词的首部出现    (此单词不是我们平常认为的英语单词,而是以一个字符开始中间不出现特殊字符切以一个字符结尾的字符串我们就把它称为单词,如a123badfdf 我们称这样的为单词,而a::b   a@#b 不称为单词)

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

\b:放在单词词首词后用

\<aaaa\>:这表示匹配aaaa这个单词,只查找aaaa则个单词,aaaa必须单独在一起

  如 rooter is a boychroot is a commandthis is root \<root 匹配上这句话,只能匹配到rooter is a boythis is root,而chroot 则是以c开头的单词,而用root\>则只能匹配到hroot is a commandhis is root 而用\<root\> 则只能匹配到this is root

\(\):表示把括号的内容看成一个整体来匹配,在后面可以继续来引用这个整体 

开头说了grep命令的基本格式和参数,grep命令其实就是为了正则表达式而来的,它用于基本正则表达式,

用前面的例子来说明grep的用法:(红色为匹配的字符)

linux中建一个名为123的文本,内容为ababaabanmbanmnbddfbacvx

匹配a*b的行 命令为 grep --color a*b 123

linux 正则表达式_linux 正则表达式

grep命令中‘’和“”都可以用,前提是变量除外

grep --color a.*b 123

linux 正则表达式_linux 正则表达式_02

anmbanmnbddfb 也可以?是的可以匹配,因为“.”表示任意单个字符,它可以随机变化的,不要理解为“.”出现了一个的任意字符,而后这个字符又匹配了任意次。

grep --color a\?b 123

linux 正则表达式_linux 正则表达式_03

grep --color a\{1,3\}b 123

linux 正则表达式_linux 正则表达式_04

grep --color ^a 123

linux 正则表达式_linux 正则表达式_05

grep --color b$ 123

 

linux 正则表达式_linux 正则表达式_06

grep --color \<an 123 或  grep --color \ban 123

linux 正则表达式_linux 正则表达式_07

grep --color mb\> 123

 

 

 

linux 正则表达式_linux 正则表达式_08

在创建个名为aaa的文件其内容为

                               rooter is a boy

                         chroot is a command

                            this is root 

grep --color \<root\> aaa

 

linux 正则表达式_linux 正则表达式_09

将文件aaa的内容稍加改变,如下

                           rooter is a boy

                         chroot is a command  this is root

                            this is root this is root

grep --color \(root\).*\1 aaa

linux 正则表达式_linux 正则表达式_10

表示以root为整体的从第一个root到最后一个root之间匹配的行

                     扩展正则表达式

基本正则表达式用到的命令为grep而扩展的正则表达式则用grep -Eegrep

扩展正则表达式和基本正则表达式的元字符有些含义不变

?表示匹配其前面的字符1次或0次 

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

{mn}:不使用反斜线,同时表示匹配期前的字符至少m次,至多n

():分组

|:表示或者,就是“|”的整个左边或整个右边

egrep --color a?b 123

linux 正则表达式_linux 正则表达式_11

和基本正则表达式的结果一样

egrep --color a{1,3}b 123

linux 正则表达式_linux 正则表达式_12

egrep --color a+b 123

linux 正则表达式_linux 正则表达式_13

egrep --color b|ab 123

linux 正则表达式_linux 正则表达式_14

基本正则表达式和扩展正则表达式的用法就是如此,比较其两者元字符的不同之处来进行学习,判断用哪个表达式比较方便,要掌握grepegrep的用法等