grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。linux
[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开头的行。 shell
$ 锚定行的结束 如:'grep$'匹配全部以grep结尾的行。 express
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,而后是p。centos
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。bash
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 app
(..) 标记匹配字符,如'(love)',love被标记为1。ide
\ 锚定单词的开始,如:'\匹配包含以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
后向引用
后向引用就是第二个匹配和第一个同样
做业:
一、显示三个用户root、mage、wang的UID和默认shell
[root@centos7 app]#grep -E "^(root|mage|wang)\b" /etc/passwd
二、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
三、[root@centos7 app]#egrep "[[:alnum:]_]+()" /etc/rc.d/init.d/functions
四、
三、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@centos7 app]#echo "/etc/init.d/functions" |egrep -o "[^/]+/?$"
四、使用egrep取出上面路径的目录名
五、[root@centos7 app]#echo "/etc/rc.d/init.d/functions"|egrep -o "^/./\b"
六、
五、统计last命令中以root登陆的每一个主机IP地址登陆次数
last |grep ^root |egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" |sort |uniq -c
六、[root@centos7 app]#last |grep "root"|egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}"|sort -n|head -n1
七、
六、利用扩展正则表达式分别表示0-九、10-9九、100-19九、200-24九、250-255
[0-9],[1-9][0-9],1[0-9][0-9],2[0-4][0-9],25[0-5]
七、显示ifconfig命令结果中全部IPv4地址
八、[root@centos7 app]#ifconfig|egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}"
九、
八、将此字符串:welcome to magedu linux 中的每一个字符去重并排序,重复次数多的排到前面
九、[root@centos7 app]#echo "welcomme to magedu linux" |grep -o "[[:alpha:]]"|sort |uniq -c|sort -n
十、
[root@centos7 app]#echo "welcomme to magedu linux" |grep -o "[[:alpha:]]"|sort |uniq -
九、用正则表达式表示出QQ号
十、egrep [0-9]{5,10}
十、用正则表达式表示出×××号
十一、[root@centos7 app]#echo "36042919891003193X" |egrep -o [0-9]{17}[A-Z]
十二、用正则表达式表示手机号
1三、root@centos7 app]#echo "13169917543"|egrep -o "^1[3|4|5|7|8][0-9]{9}$"
1四、
1五、十二、用正则表达式表示邮箱: 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