grep及正则表达式
一、grep
1、grep定义
GloballysearchaRegularExpressionandPrint
全局搜索(匹配正则表达式的)并打印
扩展命令:
egrep:扩展grep,相当于grep-E命令,使用扩展正则匹配。
fgrep:fastgrep,不支持正则匹配的grep,只能匹配字符本来的意义。
grep与egrep的区别是egrep支持更多扩展的正则
2、grep参数(#代表数字)
-v:显示不匹配的行
-i:忽略字母大小写
-o:只打印匹配的字符
-E:扩展正则表达式
-A#:显示匹配的行以及匹配行后的#行
-B#:显示匹配的行以及匹配行前的#行
-C#:显示匹配的行以及匹配行前后的各#行
--color:定义匹配字符的颜色
颜色标记匹配的字符配置:
aliasgrep='grep--color=auto'
aliasegrep='egrep--color=auto'
3、各个参数举例:
二、正则表达式
1、字符匹配
.:匹配一个字符
[]:匹配范围内任意单个字符
[^]:匹配范围外任意单个字符
例:
原始文件
.:匹配任意一个字符
[]:匹配a,b两个字符
[^]:匹配除了a,b,c三个以外的任意字符
扩展:
[0-9][[:digit:]]匹配数字
[a-z][[:lower:]]匹配小写字母
[A-Z][[:upper:]]匹配大写字母
[[:space:]]匹配所有空白字符(空格,制表符,新行)
[0-9a-zA-Z][[:alnum:]]匹配字母及数字
[a-zA-Z][[:alpha:]]匹配字母
[[:punct:]]标点符号
2、次数匹配
*:任意次数
.*:任意长度的任意字符
\?:0次或1次
\+:1次或多次
\{m\}:m次
\{m,n\}:至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
例:
*:匹配l任意次数
.*:匹配h开头的任意行
\?:匹配el字符,l可以是0次或1次
\+:匹配el,l最少1个
\{m\}:匹配ell字符
\{m,n\}:匹配el,l最少1次,最多2次
\{0,n\}:匹配el,l最多2次,
\{m,\}:匹配el,l最少1次
3、定位匹配
^:匹配行首
$:匹配行尾
\<,\b:匹配单词词首
\>,\b:匹配单词词尾
例:
^:匹配以h开头的行
$:匹配以d结尾的行
\<:匹配以h开头的单词
\>:匹配以o结尾的单词
\<\>:匹配单词hello
4、分组和引用
\(\):小括号内的为一组
\1,\2,……引用分组,1为第一个小括号内容,2为第二个小括号内容……
例:匹配以4个字符开头并且与开头相同4个字符结尾的行
5、元字符总结:
正则表达式及grep
字符匹配:.[][^]
次数匹配:*\+\?\{\}
定位匹配:^$\<\>
分组和后向引用:\(\)\1,\2……
扩展正则表达式及egrep
字符匹配:.[][^]
次数匹配:*+?{}
定位匹配:^$\<\>
分组和后向引用:()\1,\2……
或者:a|b
扩展正则表达式举例(为省事和上面的例子顺序相同,只截了3个图)
|:匹配w或W的行
三、作业
3、显示`netstat-tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
5、显示当前系统上root、centos或者user1用户的默认shell和UID(请事先创建这些用户,若不存在)
6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其完整路径和目录名
目录名:
#echo/etc/rc.d/init.d/functions|grep-o'/.*/'|grep-o'\<[a-zA-Z.]\+\>/$'|grep-o'[a-zA-Z.]\+'
8、找出ifconfig命令执行结果中1-255之间的数字
#ifconfig|egrep'\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>'
合并相同的[]为[]{},合并后简写结果
#ifconfig|egrep'\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9]{2}\>|\<2[0-4][0-9]\>|\<25[0-5]\>'
省略多余的\<\>,合并简写结果
#ifconfig|egrep'\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>'原文链接:https://www.f2er.com/regex/360073.html