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
转载于:https://blog.51cto.com/11190389/2044412