grepegrep及相应的正则表达式和用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grepegrep及相应的正则表达式和用法相关的知识,希望对你有一定的参考价值。
什么是正则表达式
正则表达式是你定义的、Linux工具用来过滤文本的模式模板。Linux工具(如grep,egrep)能
够在数据流向工具时对数据进行正则表达式模式匹配。如果数据匹配模式,它就会被接受并进一
步处理。如果数据不匹配模式,它就会被过滤掉。示意图如下:
正则表达式基本知识
正则表达式的实现是依靠正则表达式引擎来实现的。
什么是正则表达式引擎?它是解释正则表达式模式并使用该模式进行文本匹配的底层软件。
Linux中有两种主流正则表达式:
BRE:基本正则表达式;
ERE:扩展正则表达式;
学习正则表达式首先要了解正则表达式的元字符。
ERE元字符与BRE类似,写法更简洁并增加新的元字符。
以上元字符将通过grep(BRE)和egrep(ERE)逐个演示
grep命令简介
grep家族:
grep:支持基本正则表达式;
egrep:支持扩展正则表达式;
fgrep:不支持正则表达式;
grep命令:
grep [OPTIONS] PATTERN [FILE...];
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...];
常用参数:
参数 | 含义 |
--color=auto | 对匹配到的文本着色后高亮显示 |
-i | 忽略字符大小写 |
-v | 反向匹配 |
-o | 仅显示匹配到的文本自身 |
-E | 支持扩展的正则表达式 |
-q | 静默模式,不输出任何信息 |
egrep命令:
相当于grep -E 使用方式与grep相似;
正则表达式练习
练习说明
下列练习都大多数没有给出文字解释,个人认为解释是没必要的,一切都在做中学,不理解的
地方仿照例子写几个测试多做几次,这比文字解释更直观。
grep参数使用练习:
-i忽略大小写:
-v反向匹配:
-o只显示匹配内容:
-q静默模式:
BRE元字符练习
.匹配单个字符
[]匹配范围内的任意单个字符
[]特殊字符
[^ ]匹配范围外的任意单个字符
*匹配前面的字符任意次(0,1或多次)
\+匹配前面的字符至少1次(不要忘了“\”)
\?匹配前面的0次或1次(不要忘了“\”):
\{m\}其前面的字符出现m次,m为非负整数(不要忘了“\”)
\{m.n\}其前面的字符出现m次,m为非负整数;[m,n]
^行首匹配
$行尾匹配
\<或\b匹配单词左侧
\>或\b匹配单词右侧
\<word\>匹配整个单词
\(x\)将此x匹配到的字符当作整体进行处理
\n:第n个括号的匹配模式所匹配到的内容
要求匹配like...liker和love...lover
这个需要说明下,按照需求第一印象的匹配方案是l.*e.*l.*r,但这样会匹配love..liker,
like...lover。
如果要避免这样的问题,后一个单词的匹配必须使用第一个匹配单词的结果。也就是当
匹配到like后,将like保存,在第二个匹配是直接加上r使用(第二个匹配模式变为liker)。
所以\(like\)的意思就是匹配到like后,将like保存,通过\1(引用第一个括号匹配到的内容)
来建立第二个liker匹配模式。
--------------------------------------------------------------------------------------------
egrep练习
egrep使用扩展正则表达式,所以很多元字符可以简写,如()、{}、+、?。下面补充"|"的
示例,其他的以综合练习为主。
|匹配左边后右边
---------------------------------------------------------------------------------------------
综合练习1
找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行
综合练习2
找出"fdisk -l“命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行
综合练习3
找出”ldd /usr/bin/cat“命令的结果中文件路径
综合练习4
echo输出一个绝对路径,使用egrep取出其基名
遇到的问题
之前做的时候没有考虑到目录情况,当时的解决方案是第一条指令,当换成目录就就失灵了。
修改方案
在$前添加/?(/出现0或1次)就完美解决。
综合练习5
找出ifconfig命令结果中的1-255之间的整数
方案1
问题
出现超出255的数字和非单个数字
分析原因
从上图可以看出,默认下[0-9]进行全匹配
解决方案
加上单词边界,就明确指定了要匹配数字的位数
最终方案
综合练习6
添加用户bash、testbash、basher及nologin,要求前三个用户的默认shell为/bin/bash,
nologin的默认shell为/sbin/nologin,而后找出其用户名与shell名相同的用户
综合练习7
匹配电话号码,模板如下:
(123)456-789
(123) 456-789
123-456-789
123.456.789
综合练习8
找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行
尾巴
正则表达式要想达到熟练应用,必须经过大量练习,今后看到好的习题会追加到该文章。
Learn Linux The Hard Way!
本文出自 “Learn Linux The Hard Way” 博客,请务必保留此出处http://11293595.blog.51cto.com/11283595/1748836
以上是关于grepegrep及相应的正则表达式和用法的主要内容,如果未能解决你的问题,请参考以下文章