| 
       
	一、基本用法 
	grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep在数据中查找出一个字符串时,是以整行为单位来进行数据选取的。 
	1、命令格式 
	  
	复制代码代码示例: 
	grep [cinvs] 'patten' filename 
	2、主要参数 
	  
	-c:只输出匹配行的计数。 
	-i:不区分大小写(只适用于单字符)。 
	-n:显示匹配行及行号。 
	-s:不显示不存在或无匹配文本的错误信息。 
	-v:显示不包含匹配文本的所有行。 
	3、patten 
	要搜索的关键字或正则表达式语句,正则表达式参见后文。 
	4、简单实例 
	  
	#netstat -nap|grep 80 
	上面命令查询监听80端口的行。 
	#grep -n "world" hello.txt 
	查询文件hello.txt中含有"world"字符串的行,并显示行号。 
	#grep -n "printf" main.c hello.c world.c 
	在源码文件main.c、hello.c和world.c中查询调用了printf函数的行,并显示行号。 
	#grep -n "printf" * 
	在当前目录的所有文件中查询调用了printf函数的行,并显示行号。也可以指定路径,比如:/usr/local/include/*。 
	#grep -r "printf" * 
	在当前目录及所有子目录下递归查找调用了printf函数的行,并显示行号。 
	  
	二、正则用法 
	grep patten正则表达式主要元字符及使用如下表: 
	元字符 
	功能 
	例子 
	匹配什么 
	^ 
	锚定行的开始 
	/^love/ 
	匹配所有以love开头的行 
	$ 
	锚定行的结束 
	/love$/ 
	匹配所有以love 结束的行 
	. 
	匹配一个字符 
	/l..e/ 
	匹配这样的行,这些行包含这样的字符:第一个字符是l,紧跟着两个字符,然后是e 
	* 
	代表0个或多个先前字符 
	/*love/ 
	匹配所有这样的行,有0个或多个空格,空格后跟着love 
	[] 
	匹配字符组中的一个字符 
	/[Ll]ove/ 
	匹配所有包含love或者Love的行 
	[^] 
	匹配一个不在范围内的字符 
	/[^A-Z]ove/ 
	< 
	锚定单词的开始 
	<love 
	匹配所有这样的行,这些行包含以love开头的单词(vi和grep支持这个功能) 
	> 
	锚定单词的结束 
	Love> 
	匹配所有这样的行,这些行包含以love结束的单词(vi和grep支持这个功能) 
	(..) 
	标记后面用到的匹配字符 
	/(love)able1rs/ 
	最多可以使用9个标签。第一个标签是模板最左边的部分。在本例子中,模板love保存的标签为1,后面的1指得就是love;本例子搜索的是这样的行,这些行包含这样的字符,在Loveabel后面跟着lovers 
	x{m} 
	M次复制字符x 
	x{m,} 
	至少m次复制字符x 
	x{m,n} 
	至少m次,至多n次复制字x 
	w 
	文字和数字字符,[A-Za-z0-9] 
	Lw*e 
	匹配一个L字符,紧跟着0个或多个文字或数字字符,然后是e 
	W 
	同上 
	b 
	单词分界线 
	bloveb 
	仅仅匹配单词love 
	简单实例如下: 
	  
	#ls -l | grep '^a' 
	通过管道过滤ls -l输出的内容,只显示以a开头的行。 
	#grep 'test' d* 
	显示所有以d开头的文件中包含test的行。 
	#grep '[a-z]\{5\}' aa 
	显示所有包含每个字符串至少有5个连续小写字符的字符串的行。 
	#grep 'w\(es\)t.*\1' aa 
	如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。 
	三、其它家族 
	grep家族除了有grep命令外,还包括egrep、fgrep和pgrep。 
	1、egrep 
	egrep是grep的扩展,支持更多的正则元字符,具体如下: 
	+ 
	匹配一个或者多个先前字符 
	[a-z]+ove 
	匹配一个或者多个小写字符且后面是ove的, 
	? 
	匹配0个或者多个先前字符 
	Lo?ve 
	匹配L后面有一个或者没有o,然后是ve 
	a|b|c 
	匹配a或b或c 
	Love|hate 
	匹配love或hate其中一个 
	() 
	字符组 
	Love(able|rs)(ov)+ 
	匹配loveable或lovers,匹配一个或多个ov 
	(…)(…)12 
	标记匹配字符串 
	(love)ing 
	标签标记出寄存器的一部分,并稍后替换模板。该模板叫做1,并可反复引用。在表达式中最多可以使用9个这样的标签。例如,模板love被保存在寄存器1中并稍后替换标签叫做1 
	x{m} 
	重复字符X,m次,至少m,或者m次和n次之间。 
	x{m,} 
	x{m,n} 
	2、fgrep        
	fgrep是fixed grep或fast grep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思。 
	3、pgrep 
	pgrep是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。 
	pgrep默认显示程序对应的进程ID列表: 
	  
	复制代码代码示例: 
	#grep httpd 
	4557 
	4558 
	4559 
	4560 
	  
	pgrep常用参数如下: 
	-l:列出进程ID列表和程序名称 
	-o:列出进程起始ID 
	-n:列出进程终止ID 
	  
	复制代码代码示例: 
	#pgrep -l httpd 
	4557 httpd 
	4558 httpd 
	4559 httpd 
	4560 httpd 
	#pgrep -o httpd 
	4557 
	#pgrep -lo httpd 
	4557 httpd 
	#pgrep -n httpd 
	4560 
	#pgrep -ln httpd 
	4560 httpd 
	#pgrep httpd|wc -l 
	4 
	以上通过实例介绍了grep命令的用法,grep命令在linux中用的很多,经常与linux find命令结合实用,用于linux下文件或目录的查找。 
      (责任编辑:IT) |