轻松上手正则表达式与grep,sed,awk(一)

本文发布时间: 2019-Mar-22
一些废话:对于正则表达式,一直都是似懂非懂,看到一些代码,脚本中带有正则,awk,sed,心里总有点虚。主要是记不住,平时又没怎么用,也就没总结了。现在有空,决定总结一下,顺便克服一下看到shell,js这些带有正则就心虚的弱点。打算分三篇文章来写正文:一般来说,正则分好几种,但基本都差不多,我所了解的有 “基本正则”,“扩展正则“及”perl正则”,本文更偏向说记录“基本正则”和“扩展正则”,它们在grep,egrep,sed,awk中发挥着重要发作用。开始正则前,先复习一下grep的一些常用参数:-n ,显示行号,-v, 反向选择-i,忽略大小写下面来始抄书了,参考《鸟哥的Linux私房菜.基础学习篇 》,先下载我们要用的文本:http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt内容如下:先来学习”基本正则表达式“1.直接匹配例1.分别找出含apple和is 的文本这应该是最简单的使用正则了2.方括号[][]主要是进行集合方面的匹配,用法我们还是用例子说明例2匹配含有test,tast的文本可以看出,[]就是从集合[ae]中选出一个一个来匹配3.方括号[]与中横线-结合对于想匹配含有一个数字的文本,我们可以写成[0123456789],但这样难免太麻烦,这就需要中横线了对于数字,可以写成[0-9], 同样,对于字母也可以应用上来,大写字母[A-Z],小写字母[a-z],也可以合在一块,如大小写字母[a-zA-Z].例3,找出含有数字的文本4.方括号[] ,-,^,三者结合在[]中出现^表示取反,举例说明例4.取出带有oo,但oo前不含g的文本最后一个”19:goooooogle yes!”为什么会匹配上呢?虽然前面是goo,明显不满足,但是, go(oo)oogle,是满足的,所以匹配上了。这也许就是正则的难点之一,你写出的正则或许存在bug,但你还没发现。例5, 匹配带有oo,的文本,但oo前不含小写字母 看到了吧,这就是[],-,^共同使用,注意:^在[]内才表示取反。5.^与$这里又出现了^,但与上面的不一样,这里的^表示行首,相应的$就表示行尾。例6 取出以the 开头的文本例7 取出以数字或字母结尾的文本例8取出空行空行用’^$’进行匹配6.点号. 与星号*点号.表示有且仅有一个任意字符星号表示重复前一个0个或多个字符例9匹配形如g??d的字符串(gd之间有两个字符)如结果所示,点号.是表示一个任意字符。例10 匹配至少连续两个o以上的字符。注意到这里,”*”的意义与我们所认识的通配符*是不一样的。例11匹配g开头g结尾的文本用’g*g’ 是不行的,因为*和通配符是不一样,正确的是’g.*g’所以,记住,正则表达式的*和通配符的 *不一样!7.转义如果我们想匹配的文本正好是代表一些特殊字符(《鸟哥的linux私房菜》中说是在shell中有特殊函义,我认为是不正确的,或者说让人误解,只是 shell中的吗?比如他举的例子点号,在shell中代表的是本目录吧?其实真正的原因是.是正则表达字符吧?),该如何?转义!如匹配以点号 . 结尾的文本,我们知道.在正则表达式中表示匹配且仅匹配任意一个字符,所以可以用’.$’今天就先写到基本的正则表达式吧。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表