基本正则表达式
在学习正则表达式时,先了解一些基本命令和一些linux中常用shell的通配符,
Grep命令就是我们要了解的命令。
Grep :根据模式搜索文本,并将符合模式的文本行显示出来。(显示的是匹配字符所在的行)
所谓模式就是文本字符和正则表达式的元字符组合而成匹配条件,模式也可以是文本字符。
Grep的格式:
grep [选项] 模式 目标
选项:
--color:将匹配模式的字符用颜色显示出来
-i:查找时忽略字符大小写
-v:被模式匹配的行不显示,只显示没有被模式匹配的行
-o:只显示被模式匹配的字符串
-E:使用扩展的正则表达式
-A [0-9]:显示被匹配到的行,并显示其行的后几行
-B:显示被匹配到的行,并显示其行的前几行
-C:显示被匹配到的行,显示前后个几行
通配符:是为了方便用户用来查找某些符合特定字符或模式的文件
一些基本的通配符有:
*:表示任意长度的任意字符 比如:a*b 表示a和b之间的任意长度的任意字符,任意长度也可以表示没有,如ab、acb、a123456b
?:表示任意一个字符,只能有一个字符 比如:a?b 表示a和b之间只有一个字符,如acb、a3b、axb
[]:表示指定范围内的字符 比如:a[xy12]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 1或2 如: axb、ayb、azb、a1b、a2b 如果是这样a[0-9]b则表示:a与b之间可以是0-9的任意某个字符比如 a1b、a2b、a3b
[^]:表示除了指定范围内的其他任意一个字符 比如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:锚定词首,其后面的任意字符必须作为单词的首部出现 (此单词不是我们平常认为的英语单词,而是以一个字符开始中间不出现特殊字符切以一个字符结尾的字符串我们就把它称为单词,如a123、badfdf 我们称这样的为单词,而a::b a@#b 不称为单词)
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
\b:放在单词词首词后用
\<aaaa\>:这表示匹配aaaa这个单词,只查找aaaa则个单词,aaaa必须单独在一起
如 rooter is a boy,chroot is a command,this is root 用\<root 匹配上这句话,只能匹配到rooter is a boy和this is root,而chroot 则是以c开头的单词,而用root\>则只能匹配到hroot is a command和his is root 而用\<root\> 则只能匹配到this is root
\(\):表示把括号的内容看成一个整体来匹配,在后面可以继续来引用这个整体
开头说了grep命令的基本格式和参数,grep命令其实就是为了正则表达式而来的,它用于基本正则表达式,
用前面的例子来说明grep的用法:(红色为匹配的字符)
在linux中建一个名为123的文本,内容为a、b、ab、aab、anmb、anmnbddfb、acvx
匹配a*b的行 命令为 grep --color ‘a*b’ 123
在grep命令中‘’和“”都可以用,前提是变量除外
grep --color ‘a.*b’ 123
anmb、anmnbddfb 也可以?是的可以匹配,因为“.”表示任意单个字符,它可以随机变化的,不要理解为“.”出现了一个的任意字符,而后这个字符又匹配了任意次。
grep --color ‘a\?b’ 123
grep --color ‘a\{1,3\}b’ 123
grep --color ‘^a’ 123
grep --color ‘b$’ 123
grep --color ‘\<an’ 123 或 grep --color ‘\ban’ 123
grep --color ‘mb\>’ 123
在创建个名为aaa的文件其内容为
rooter is a boy
chroot is a command
this is root
grep --color ‘\<root\>’ aaa
将文件aaa的内容稍加改变,如下
rooter is a boy
chroot is a command this is root
this is root ,this is root
grep --color ‘\(root\).*\1’ aaa
表示以root为整体的从第一个root到最后一个root之间匹配的行
扩展正则表达式
基本正则表达式用到的命令为grep而扩展的正则表达式则用grep -E或egrep
扩展正则表达式和基本正则表达式的元字符有些含义不变
?:表示匹配其前面的字符1次或0次
+:匹配其前面的字符至少1次
{m,n}:不使用反斜线,同时表示匹配期前的字符至少m次,至多n次
():分组
|:表示或者,就是“|”的整个左边或整个右边
egrep --color ‘a?b’ 123
和基本正则表达式的结果一样
egrep --color ‘a{1,3}b’ 123
egrep --color ‘a+b’ 123
egrep --color ‘b|ab’ 123
基本正则表达式和扩展正则表达式的用法就是如此,比较其两者元字符的不同之处来进行学习,判断用哪个表达式比较方便,要掌握grep和egrep的用法等