首页 > 代码库 > Grep 和 Egrep 使用细解
Grep 和 Egrep 使用细解
Grep 想说爱你不容易
grep:
Global search REgular expression and Print out the line
文本搜索工具:根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。
用法:grep [OPTION]... ‘PATTERN‘ FILE...
grep--color 自动执行着色
正则表达式:是由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能;
两种类型的元字符
基本正则表达式
扩展正则表达式
基本正则表达式:
字符匹配:
. 匹配任意单个字符
[] 匹配指定集合中的任意单个字符
[[:digit:]], [0-9] 匹配指定集合中的单个数字
[[:lower:]], [a-z] 匹配指定集合中的单个小写字母
[[:upper:]], [A-Z] 匹配指定集合中的单个大写字母
[[:alpha:]], [a-zA-Z] 匹配指定集合中的单个大写或小写字母
[[:alnum:]], [0-9a-zA-Z] 匹配指定集合中的单个数字或小写字母或大写字母
[[:space:]] 匹配指定集合中的空白格
[[:punct:]] 匹配指定集合中的标点符号
[^] 匹配指定集合外的任意单个字符
匹配次数:用于对其前面紧邻的字符所能够出现的次数作出限定
* 匹配其前面的字符任意次,0,1或多次;
\? 匹配其前面的字符0次或1次;
\+ 匹配其前面的字符出现至少1次;
\{m\} 匹配其前面的字符m次;
\{m,n\}匹配其前面的字符至少m次,至多n次;
.* 匹配任意长度的任意字符
位置锚定:
^ 行首锚定 写在模式的最左侧
$ 行尾锚定 写在模式的最右侧
^$ 空白行
\< 词首锚定, \b 出现在要查找的单词模式的左侧;\<char
\> 词尾锚定, \b 出现在要查找的单词模式的右侧;char\>
\<pattern\> 匹配单词
分组:\(\)
后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用
\1, \2, \3
模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容
grep选项:
-v 反向选取,匹配到的不显示,不匹配到的显示
-o 仅显示匹配到内容
-i 忽略字符大小写
-E 使用扩展正则表达式
-A # 显示匹配到的行包括下面的#行
-B # 显示匹配到的行包括前面的#行
-C # 显示匹配到的行包括上下的#行
举例练习:
1、显示/proc/meminfo文件中以大写或小写S开头的行;
2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
注:匹配单词取反时,必须使用-v选项。
\<\>只锚定数字和字母
3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户;
而后显示最大的用户
4、找出/etc/passwd文件中的一位数或两位数;
注:‘|’或者符仅用于egrep的模式中,在grep模式中则使用‘\|’转译该符号
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
7、找出netstat -tan命令执行结果中以‘LISTEN‘(后可有空白字符)结尾的行;
Egrep 扩展的正则表达式
用法:
# grep -E ‘pattern‘ file...
# egrep ‘pattern‘ file...
注:“#”在命令行使用的命令格式
扩展正则表达式的元字符:
字符匹配:
. 匹配任意单个字符
[] 匹配指定集合内的单个字符
[^] 取反,匹配指定集合外的任意单个字符
匹配次数限定:
* 匹配其前面字符0 次,1 次,多 次
? 匹配其前面字符0次或1次;
+ 匹配其前面的字符至少1次;
{m} 匹配其前面的字符 m 次;
{m,n}匹配其前面字符至少m次-->{m,};至多n次-->{0,n}
锚定:
^ 锚定行首
$ 锚定行尾
\< 锚定词首
\> 锚定词尾 或使用 \b
分组:
()使用时无需\支持后向引用:\1, \2, ...
或者:
a|b 匹配a或者b
ab|cd 匹配整个左侧或右侧
举例
练习1:显示当前系统上root、centos或user1用户的默认shell及用户名;
练习2:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;
练习3:使用echo输出一个路径,而使用egrep取出其基名;
注意:此题查找的路径中带符号,固使用命令时要思考清楚自己想搜索的路径结果
fgrep fast grep 基于快速搜索
用法fgrep [option] ‘string‘ file...
注:该命令不支持正则表达式,搜索时仅搜索字面字符,基于快速搜索
本文出自 “保持低调” 博客,请务必保留此出处http://664778789.blog.51cto.com/7534952/1577162
Grep 和 Egrep 使用细解