grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

[options]主要参数: -c:只输出匹配行的计数。 -I:不区分大 小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:取反 grep:

[root@centos7 ~]#grep -i "^S" /proc/meminfo [root@centos7 ~]#grep -v "bash$" /etc/passwd [root@centos7 ~]#grep '<rpc>' /etc/passwd|cut -d: -f7 /sbin/nologin 正则表达式: 选项与参数:  --color=auto: 对匹配到的文本着色显示  -v: 显示不被pattern匹配到的行  -i: 忽略字符大小写  -n:显示匹配的行号  -c: 统计匹配的行数  -o: 仅显示匹配到的字符串  -q: 静默模式,不输出任何信息  -A #: after, 后#行  -B #: before, 前#行  -C #:context, 前后各#行  -e:实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file  -w:匹配整个单词  -E:使用ERE ,egrep  -F:相当于fgrep,不支持正则表达式 ^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

  • 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的 行。 .*一起用代表任意字符。

[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

(..) 标记匹配字符,如'(love)',love被标记为1。

\ 锚定单词的开始,如:'\匹配包含以grep开头的单词的行。

> 锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。

x{m} 重复字符x,m次,如:'0{5}'匹配包含5个o的行。

x{m,} 重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。

x{m,n}重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10个o的行。

\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\b 单词锁定符,如: '\bgrep\b'只匹配grep。 取函数名称 [root@centos6 ~]#grep -o "^[[:alnum:]_]+[[:space:]]*()" /etc/init.d/functions 再就是分组整体,这是一个或的意思 [root@centos6 ~]#echo axx bxx cxx |grep "(a|b|c)xx" axx bxx cxx

(a..b) a12b axyb a12b 后向引用 后向引用就是第二个匹配和第一个一样 作业: 1、显示三个用户root、mage、wang的UID和默认shell

[root@centos7 app]#grep -E "^(root|mage|wang)\b" /etc/passwd

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行 3、[root@centos7 app]#egrep "[[:alnum:]_]+()" /etc/rc.d/init.d/functions 4、 3、使用egrep取出/etc/rc.d/init.d/functions中其基名 [root@centos7 app]#echo "/etc/init.d/functions" |egrep -o "[^/]+/?$"

4、使用egrep取出上面路径的目录名 5、[root@centos7 app]#echo "/etc/rc.d/init.d/functions"|egrep -o "^/./\b" 6、 5、统计last命令中以root登录的每个主机IP地址登录次数 last |grep ^root |egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" |sort |uniq -c 6、[root@centos7 app]#last |grep "root"|egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}"|sort -n|head -n1 7、 6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255 [0-9],[1-9][0-9],1[0-9][0-9],2[0-4][0-9],25[0-5] 7、显示ifconfig命令结果中所有IPv4地址 8、[root@centos7 app]#ifconfig|egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" 9、 8、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面 9、[root@centos7 app]#echo "welcomme to magedu linux" |grep -o "[[:alpha:]]"|sort |uniq -c|sort -n 10、 [root@centos7 app]#echo "welcomme to magedu linux" |grep -o "[[:alpha:]]"|sort |uniq - 9、用正则表达式表示出QQ号 10、egrep [0-9]{5,10} 10、用正则表达式表示出×××号 11、[root@centos7 app]#echo "36042919891003193X" |egrep -o [0-9]{17}[A-Z] 12、用正则表达式表示手机号 13、root@centos7 app]#echo "13169917543"|egrep -o "^1[3|4|5|7|8][0-9]{9}$" 14、 15、12、用正则表达式表示邮箱: x@y.z.m [root@centos7 app]#echo "-7yin12@vip.qq.xom"|egrep "[[:alnum:]_/]{5,15}@([[:alnum:]]{0,5}.)?[[:alnum:]]{0,5}.[[:alnum:]]{2,3}" -7yin12@vip.qq.xom