Loading... <p style="text-align:center;text-indent:21px"><span style="font-size: 20px"><strong><span style="font-family: 宋体">正则表达式及其用法</span></strong></span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><strong><span style="font-family:宋体">1. </span><span style="font-family:宋体">什么是正则表达式</span></strong></p> <p class="MsoListParagraph" style="margin-left: 45px;text-indent: 0"><span style="font-family:宋体">正则表达式是Global search REgular expression and Print out the line的缩写。是一类用字符所书写的模式,其中许多字符并不表示其字面意义,而是表达控制或通配等功能。</span></p> <p class="MsoListParagraph" style="margin-left: 45px;text-indent: 0"><span style="font-family:宋体">在Linux中,用正则表达式搜索文本的常用命令:</span></p> <p class="MsoListParagraph" style="margin-left: 45px;text-indent: 0"><span style="font-family:宋体">grep: </span><span style="font-family: 宋体">使用基本正则表达式匹配文本。</span></p> <p class="MsoListParagraph" style="margin-left: 45px;text-indent: 0"><span style="font-family:宋体">egrep</span><span style="font-family: 宋体">:使用扩展正则表达式匹配文本,同: grep –E。</span></p> <p class="MsoListParagraph" style="margin-left: 45px;text-indent: 0"><span style="font-family:宋体">fgrep: </span><span style="font-family: 宋体">快速grep,不支持正则表达式,不识别元字符。</span></p> <p class="MsoListParagraph" style="margin-left: 45px;text-indent: 0"><span style="font-family: 宋体"></span></p> <p> 语法格式:</p> <p> grep [option]… 'PATTERN' FILE…</p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><strong><span style="font-family:宋体">2. </span><span style="font-family:宋体">基本正则表达式</span></strong></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (1) </span><span style="font-family:宋体">字符匹配</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(a) </span><span style="font-family:宋体">.: </span><span style="font-family:宋体">匹配任意单个字符。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(b) </span><span style="font-family:宋体">[]:</span><span style="font-family:宋体">匹配指定范围内的任意单个字符。</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[0-9] </span><span style="font-family:宋体">或[[:num:]]:匹配任意当个数字</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[a-z]</span><span style="font-family:宋体">或[[:lower:]]:匹配任意单个小写字母</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[A-Z]</span><span style="font-family:宋体">或[[:upper:]]:匹配任意一个大写字母</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[[:space:]]:</span><span style="font-family:宋体">匹配空格或制表符</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[[:punct:]]:</span><span style="font-family:宋体">匹配特殊字符</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[[:alpha:]]:</span><span style="font-family:宋体">匹配单个任意字符</span></p> <p style="margin-left: 85px"><span style="font-family:宋体">[[:alnum:]]:</span><span style="font-family:宋体">匹配单个字母或数字</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(c) </span><span style="font-family:宋体">[^]:</span><span style="font-family:宋体">匹配不包括指定范围内的任意单个字符。</span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (2) </span><span style="font-family:宋体">次数匹配</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>a<span style="font-family:宋体">)</span>*: <span style="font-family:宋体">匹配它前面出现的字符任意次。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>b<span style="font-family:宋体">)</span>\?: <span style="font-family:宋体">匹配它前面的字符</span>0<span style="font-family:宋体">次或</span>1<span style="font-family:宋体">次。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>c<span style="font-family:宋体">)</span>\{m\}: <span style="font-family:宋体">匹配它前面出现的字符</span>m<span style="font-family:宋体">次。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>d<span style="font-family:宋体">)</span>\{m,n\}: <span style="font-family:宋体">匹配它前面出现的字符至少</span>m<span style="font-family:宋体">次,至多</span>n<span style="font-family:宋体">次。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>e<span style="font-family:宋体">)</span>\{m,\}: <span style="font-family:宋体">匹配它前面出现的字符至少</span>m<span style="font-family:宋体">次。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>f<span style="font-family:宋体">)</span>\{,n\}: <span style="font-family:宋体">匹配它前面出现的字符至多</span>n<span style="font-family:宋体">次。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>g<span style="font-family:宋体">)</span>.*: <span style="font-family:宋体">匹配任意长度的任意字符</span>.</p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (3) </span><span style="font-family:宋体">位置锚定</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>a<span style="font-family:宋体">)</span>^: <span style="font-family:宋体">锚定句首,写在模式的最左面。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>b<span style="font-family:宋体">)</span>$: <span style="font-family:宋体">锚定句尾,写在模式的最右端。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>c<span style="font-family:宋体">)</span>\<: <span style="font-family:宋体">锚定词首,写在模式的最左面。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>d<span style="font-family:宋体">)</span>\>: <span style="font-family:宋体">锚定词尾,写在模式的最右面。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(</span>e<span style="font-family:宋体">)</span>.* : <span style="font-family:宋体">空白行</span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (4) </span><span style="font-family:宋体">分组\(\)</span></p> <p> <span style="font-family:宋体">分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。</span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (5) </span><span style="font-family:宋体">引用 \#</span></p> <p class="MsoListParagraph" style="margin-left: 56px;text-indent: 0"><span style="font-family:宋体">引用第#个括号中匹配到的内容,而不是模式本身。</span></p> <p class="MsoListParagraph" style="margin-left: 56px;text-indent: 0"><span style="font-family:宋体">如:\(ab\?c\).*\1 abcmnabc 匹配</span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><strong><span style="font-family:宋体">3. </span><span style="font-family:宋体">扩展正则表达式</span></strong></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family: 宋体"><strong> </strong>(1) </span><span style="font-family: 宋体">字符匹配(同基本正则表达式)</span></p> <p class="MsoListParagraph" style="margin-left: 49px"><span style="font-family:宋体"></span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(a) </span><span style="font-family:宋体">.: </span><span style="font-family:宋体">匹配任意单个字符。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(b) </span><span style="font-family:宋体">[]:</span><span style="font-family:宋体">匹配指定范围内的任意单个字符。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体">(c) </span><span style="font-family:宋体">[^]:</span><span style="font-family:宋体">匹配不包括指定范围内的任意单个字符。</span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family: 宋体"></span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (2) </span><span style="font-family:宋体">次数匹配</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>a<span style="font-family:宋体">)</span>*: <span style="font-family:宋体">匹配它前面出现的字符任意次。</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>b<span style="font-family:宋体">)</span>?: <span style="font-family:宋体">匹配它前面的字符</span>0<span style="font-family:宋体">次或</span>1<span style="font-family:宋体">次。</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>c<span style="font-family:宋体">)</span>+: <span style="font-family:宋体">匹配前面出现的字符至少一次。</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>c<span style="font-family:宋体">)</span>{m}: <span style="font-family:宋体">匹配它前面出现的字符</span>m<span style="font-family:宋体">次。</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>d<span style="font-family:宋体">)</span>{m,n}: <span style="font-family:宋体">匹配它前面出现的字符至少</span>m<span style="font-family:宋体">次,至多</span>n<span style="font-family:宋体">次。</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>e<span style="font-family:宋体">)</span>{m,}: <span style="font-family:宋体">匹配它前面出现的字符至少</span>m<span style="font-family:宋体">次。</span></p> <p style="margin-left: 47px"><span style="font-family:宋体">(</span>f<span style="font-family:宋体">)</span>{,n}: <span style="font-family:宋体">匹配它前面出现的字符至多</span>n<span style="font-family:宋体">次。</span></p> <p class="MsoListParagraph" style="margin-left: 49px"><span style="font-family:宋体"></span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (3) </span><span style="font-family:宋体">位置锚定 <span style="font-size:14px;font-family:宋体">(同基本正则表达式)</span></span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (4) </span><span style="font-family:宋体">分组()</span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (5) </span><span style="font-family:宋体">引用 \# (同基本正则表达式)</span></p> <p class="MsoListParagraph" style="margin-left: 0;text-indent: 0"><span style="font-family:宋体"> (6) </span><span style="font-family:宋体">或者 |</span></p> <p class="MsoListParagraph" style="margin-left: 49px"><span style="font-family:宋体"></span></p> <p class="MsoListParagraph" style="margin-left: 57px;text-indent: 0"><span style="font-family:宋体"> 如:a|b 表示 a或b</span></p> <p class="MsoListParagraph" style="margin-left: 57px"><span style="font-family:宋体"> ab|cd </span><span style="font-family:宋体">表示 ab或cd</span></p> <p class="MsoListParagraph" style="margin-left: 57px"><strong><span style="font-family:宋体">练习:</span></strong></p> <p class="MsoListParagraph" style="margin-left: 57px"><span style="font-family:宋体">1.</span>新建一个文本文件,假设有如下内容:</p> <p><span class="Apple-tab-span"> </span>He like his lover.</p> <p><span class="Apple-tab-span"> </span>He love his lover.</p> <p><span class="Apple-tab-span"> </span>He like his liker.</p> <p><span class="Apple-tab-span"> </span>He love his liker.</p> <p><span class="Apple-tab-span"> </span> 找出其中最后一个单词是由此前某单词加r构成的行。</p> <table> <tbody> <tr class="ue-table-interlace-color-single firstRow"> <td width="744" valign="top" style="border-width: 1px;border-style: solid"> <p>[root@centos7 ~]# cat ./liker.txt </p> <p>He like his lover.</p> <p>He love his lover.</p> <p>He like his liker.</p> <p>He love his liker.</p> <p>[root@centos7 ~]# grep '\<\(.*\)\>.*\1r' ./liker.txt </p> <p>He love his lover.</p> <p>He like his liker.</p> <p>[root@centos7 ~]# </p> </td> </tr> </tbody> </table> <p class="MsoListParagraph" style="margin-left: 57px"><span style="font-family:宋体"></span>2.写一个模式,能匹配合理的ipv4地址;1.0.0.0-239.255.255.255</p> <table> <tbody> <tr class="ue-table-interlace-color-single firstRow"> <td width="744" valign="top"> <p>[root@centos7 ~]# cat ./ip.txt </p> <p>249.1.0.1</p> <p>229.2.1111.1</p> <p>0.0.0.0</p> <p>255.255.255.255</p> <p>239.255.255.255</p> <p>1.0.0.0</p> <p>1000.0.0.0.0</p> <p>1.1000.0.0</p> <p>1.2.2000.0</p> <p>1.2.3.4000</p> <p>127.0.1.10</p> <p>[root@centos7 ~]# grep -o -E '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-3][0-9])((\.)([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}\>' ./ip.txt </p> <p>239.255.255.255</p> <p>1.0.0.0</p> <p>1.2.3.40</p> <p>127.0.1.10</p> <p>[root@centos7 ~]# </p> </td> </tr> </tbody> </table> <p class="MsoListParagraph" style="margin-left: 57px"></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信