grep全称是Global Regular Expression Print,是一个能使用正则表达式文本过滤、搜索工具,并把匹配的行打印出来,grep使用权限是所有用户。

一、基本格式

grep  [-vioqABCE]  parttern  /DIR/PATH/FILE


二、常见用法

# grep root /etc/passwd		查找到有root的行并打印出来
# grep -v root /etc/passwd	查找到没有root的行并打印出来
# grep -i root /etc/passwd	查找到有root的行并打印出来,忽略字母大小写
# grep -o root /etc/passwd	查找到有root本身并且打印出来
# grep -q root /etc/passwd	静默模式,不打印出来
# grep -c root /etc/passwd	显示出匹配到的列数
# grep -n root /etc/passwd	查找到有root的行,打印出来并显示行号
# cat /etc/passwd | grep -f /tmp/text.txt 	指定规则文件text.txt,并以此为规则从passwd中查找
# grep -A root /etc/passwd	查找到有root的行,并且与其后两行打印出来
# grep -B root /etc/passwd	查找到有root的行,并且与其前两行打印出来  
# grep -C root /etc/passwd	查找到有root的行,并将其前两行和后两行打印出来
# cat /etc/passwd | grep -E  "root|ming"	查找root或者ming的行并打印出来



三、规则表达式

1、字符匹配


.			匹配任意单个字符
[n]			匹配n字符(任意单个字符)
[^n]			匹配除n外的字符
[:alpha:]		匹配任意字符
[:upper:]		匹配任意大写字母
[:lower:]		匹配任意小写字母
[:digit:]		匹配任意数字
[:space:]		匹配所有空白字符
[:punct:]		匹配标点
[:alnum:]		匹配字符和数字

2、次数匹配

*			匹配前面的字符任意次
\?			前面的字符可有可无
\+			匹配前面的字符至少一次
\{n\}			匹配前面的字符n次
\{n,m\}			匹配前面的字符n到m次

3、位置锚定

^			行首锚定,位于最左侧
$			行尾锚定,位于最右侧
\<			词首锚定
\>			词尾锚定


四、几个练习

1、如果用户root存在,就显示其默认的shell程序

# id root && grep "^root\>" | cut -d: -f7



2、找出/etc/passwd中的两位数或三位数

# grep "\<[0-9]\{2,3\}\>" /etc/passwd



3、找出/etc/rd.d/rc.sysinit文件中至少以一个空白字符开头,且后面存在非空白字符的行

# grep "^[[:space:]]\+[^[:space:]]" /etc/rd.d/rc.sysinit



4、找出netstat -tan命令中 以LISTEN后跟0个、1个以及多个空白字符结尾的行

# netstat -tan | grep "LISTEN[[:space:]]*$"



5、找出用户名和bash名相同的行

# grep "\(^[[alnum]]\+\>\).*\1$"



6、找出root、centos和ming用户的行的用户名UID和shell

# grep -E "^(root|centos|ming)\>" /etc/passwd | cut -d: -f1,3,7




以上是本人记录一些浅显的用法,如有错误,请指正。