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
以上是本人记录一些浅显的用法,如有错误,请指正。