使用正则表达式搜索文本,并把匹配的行打印出来。使用权限是所有用户。

基本使用

grep [option] pattern filename:

	pattern如果是表达式或者超过两个单词的, 需要用引号引用。

	可以是单引号也可双引号, 区别是单引号无法引用变量而双引号可以。


grep test *file
	在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的行,并打印出该字符串的行

常用选项

  -E :开启扩展(Extend)的正则表达式。

  -i :忽略大小写(ignore case)。

  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

  -n :显示行号。

  -w :被匹配的文本只能是单词,而不能是单词中的某一部分

  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

  -o :只显示被模式匹配到的字符串。

  --color :将匹配到的内容以颜色高亮显示。

  -A  n:显示匹配到的字符串所在的行及其后n行,after

  -B  n:显示匹配到的字符串所在的行及其前n行,before

  -C  n:显示匹配到的字符串所在的行及其前后各n行,context

基本正则表达式

匹配字符

	. :任意一个字符。

	[abc]:
		表示匹配一个字符,这个字符必须是abc中的一个。

	[a-zA-Z]:
		表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。

	[^123]:
		匹配一个字符,这个字符是除了1、2、3以外的所有字符。


匹配次数

	\{m,n\}:
		匹配其前面出现的字符至少m次,至多n次。
	\?:
		匹配其前面出现的内容0次或1次,等价于\{0,1\}。
	*:
		匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。


匹配位置

	^:
		锚定行首

	$:
		锚定行尾。技巧:"^$"用于匹配空白行。

	\<:
		锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker

	\>:
		锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like

	\b:
		边界符,如:'\bgrep\b'只匹配grep

扩展的(Extend)正则表达式

注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep


egrep = grep -E 可以使用基本的正则表达外, 还可以用扩展表达式。


扩展表达式:
	+
		匹配一个或者多个先前的字符, 至少一个先前字符

	?
		匹配0个或者多个先前字符

	a|b|c
		匹配a或b或c

	()
		字符组, 如: love(able|ers) 匹配loveable或lovers

	(..)(..)\1\2
		模板匹配,\1代表前面第一个模板,\2代第二个括弧里面的模板

	x{m,n} = x\{m,n\}

	* :和基本正则表达式一样