您的位置:首页 > 运维架构 > Shell

shell下的grep工具

2016-06-26 14:15 561 查看
一. grep
grep(Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,将匹配的行打印出来,但是并不影响原文件的内容;并且通过返回值来通知搜索结果,如果命令的退出码为0则表示搜索成功返回值为1则表示搜索不成功如果搜索的文件不存在,则会返回2;因此利用这些返回值就可以进行相应的文本处理工作。
对于grep来说,其工作模式有两种:一种是Basic模式,在该模式下,其命令参数的正则表达式中对于字符'()'、'{ }'、'|'、'?'、'+'这五种字符都只是取其普通含义,如果需要使用其特殊含义需要加上转义字符'\'来对其进行转义,另外,如果不想进行转义,加上-E选项将其改为Extended模式就可以了;而对于另外一种Extended模式,表示是grep的扩展,这些字符都被解释为代表的特殊含义,而同样的,如果想要取其普通的字面意思,也可以使用转义字符'\'来转义;使用egrep命令相当于使用grep加上-E选项;

二. 正则表达式
既然grep是用来进行文本搜索的,如果对于要搜索的内容很明确,那么就可以直接在其后跟上明确的一串字符,但是如果有时候对于要搜索的内容并不是很具体,也就是需要在指定的文件中找出满足某个或者某些条件的内容,比如我需要找出所有满足正确IP地址的一串字符,格式当然就如“XXX.XXX.XXX.XXX”,那么就需要交给grep一个‘条件’,这个条件就告诉grep,我需要什么样的内容你都给我找出来,而这个‘条件’中,使用一些特殊语法来表示字符类、数量限定符和位置限定符,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式

字符类表示某一个字符范围中的某一个字符;




如下举例:




数量限定符表示对于字符的数量限定;






如下举例:







位置限定符表示对于字符出现位置的一个限定;



如下举例:




其他特殊字符:



如下举例:




三. grep常用命令选项
grep用法:grep [选项]... PATTERN [FILE]...
在每个FILE或是标准输入中查找PATTERN,默认的PATTERN是一个基本的正则表达式(缩写为BRE);

如下栗子都使用文件file:




-G 表示PATTERN是一个基本的正则表达式,默认就是这种模式;
-E 表示PATTERN是一个可扩展的正则表达式,也就是对于‘?+|{}()’这五类字符都取其特殊含义;





-F 表示正则表达式不可用,PATTERN是一组用断行符分隔的定长字符串;




-f 表示从FILE中取得PATTERN,也就是指定匹配文件,让grep查找符合匹配模式的文件内容;





-i 忽略大小写的匹配模式;





-w 表示PATTERN仅完全匹配字词,也就是只将PATTERN看做一个完整的单词来匹配;




-x 强制PATTERN仅完全只匹配一行,也就是PATTERN满足为一行的内容;





-s 不显示没有匹配项或者文件的错误信息;





-v 显示出不满足匹配条件的所有内容;





-V 显示版本号;




-m 表示从输入中匹配的最大数;




-b 打印出输出匹配行第一个字符的位编号;




-n 显示匹配行及其行号;





-H 表示搜索多个文件时,前缀显示文件名;
-h 表示搜索多个文件时,不显示文件名前缀;




-o 只显示匹配的内容;





-q 匹配成功与否,都不显示任何内容,只通过状态码来告知匹配结果





-D 对于设备比如管道或者套接字的处理,如read和skip;
-d 对于文件或文件夹的处理,如read、recurse、skip;




-r -R 递归调用;





-l 只显示匹配成功的文件名;

-L 只显示未匹配成功的文件名;




-c 统计出匹配的行数;





-A 打印出匹配行及其前面特定的行;
-B 打印出匹配行及其后面特定的行;
-C 打印出匹配行及其前后各自特定的行;




当然,如果想要查看grep其他的一些更为具体的命令的选项和使用,通过grep --help命令就可以查看;--color表示给匹配项加上颜色便于观察;

《完》

本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1792984
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: