一、正则表达式

正则表达式 Regular Expression ,简称REGEXP,用来检索、替换某些符合某个模式的文本。 正则表达式元字符有:

	. :匹配任意单个字符
	[] :匹配指定范围内的单个字符
	[^] :匹配指定范围外的 单个字符
	字符集和有(可以使用man grep查看):[:alnum:], [:alpha:], [:cntrl:], [:digit:],  [:graph:],  [:lower:],   [:print:],   [:punct:],   [:space:],   [:upper:],   [:xdigit:]

匹配次数(贪婪模式匹配尽可能多的)

	* :匹配前面的字符任意次数
	\? :匹配前面的字符一次或0次
	\{m,n\} :匹配前面的字符至少m次,最多n次
			列如有字符:a,b,ab,abb,aab,axb,amnb,那么a*b,a?b,a.*b会匹配到的字符串有:
			a*b(表示a可以出现任意次可以没有,后面接字符b) :b, ab,abb,aab,axb,amnb
			a\?b(表示a可以出现一次或0次,后面接字符b,问号要转义) :b,ab,abb,aab,axb,amnb
			a.*b(表示ab之间可以有任意字符):ab,abb,aab,axb,amnb
			a\{1,3\}b(表示a最少出现1次,最多出现3次):ab,abb,aab
			(以上使用grep测试得出)

位置锚定,即匹配指定位置出现的字符串

	^ :锚定行首,后面出现的字符串只能在行首出现
	$:锚定行尾,后面出现的字符串只能在行尾出现
	^$:匹配空白行
	\<或\b :其后面出现的字符必须作为单词的首部出现
	\>或\b :其后面出现的字符必须作为单词的尾部出现

分组: \(\):一般和\1,\2,\3一起使用

二、grep

grep:根据模式搜索,并将模式的文本行显示出来 用法:grep [OPTIONS] PATTERN [FILE...] PATTERN:是文本字符和元字符组合而成的匹配条件 常用参数: -i :忽略大小写 -o :仅显示匹配到的字符串 -v:取反,显示匹配到的以外的字符串 --color:将匹配到的字符串显示颜色 例如:

	新建grep.txt文本,内容如下:
	she like his liker.
	he love she also love.
	he like his lover.
	1.列出符合 l..e 的行(l和e之间占任意两个字符)

	2.只显示匹配到的字符串 -o

	3.忽略大小写匹配 -i

	4.取反 -v

	5.显示/proc/meminfo文件中以不区分大小的s开头的行;		
	grep -i '^s' /proc/meminfo
	grep '^[sS]' /proc/meminfo
	
	6.显示/etc/passwd中以nologin结尾的行; 
	grep 'nologin$' /etc/passwd

	7.取出默认shell为/sbin/nologin的用户列表
	grep "nologin$' /etc/passwd | cut -d: -f1

	8.取出默认shell为bash,且其用户ID号最小的用户的用户名
	grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

	9.显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
	grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab

	10.显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
	grep ':[0-9]:' /etc/inittab

	11.显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
	grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf

	12.显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
	grep '^\([0-9]\).*\1$' /etc/inittab
	
	13.找出/proc/cpuinfo文件中的,1位数,或2位数;
	grep '[0-9]\{1,2\}' /proc/cpuinfo (找出满足有一位或两位数字的行)
	grep --color '\<[0-9]\{1,2\}\>' /proc/cpuinfo (找出满足有一位或两位数字的行,且这数字只能是一个单词)

	14.查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
	grep '^student\>' /etc/passwd 
	或者 id student

三、其它

正则表达式用法很灵活,较复杂,更多的用法上百度查找。 正则表达式和通配符的区别,不要搞混淆了,想了解通配符查看“bash及其特性“文档。