linux运维正则表达式实战
1.什么是正则表达式?
简单的说,正则表达式就是一套处理大量的字符串而定义的规则和方法。
例如:假设 @代表12345
通过正则表达式这些特殊符号,我们可以快速的过滤、替换需要的内容。
linux正则一般以行为单位处理的。
2.为什么要学习正则表达式?
再工作中,我们做linux运维工作,时刻面对着大量的日志,程序,命令的输出。
迫切的需要过滤我们需要的一部分内容,甚至是一个字符串。
3.理解两个误区注意事项:
a.正则表达式的应用非常广泛,存在于各种语言中,PERL,PHP,JAVA等。
我们今天给大家讲解的就是linux的正则表达式,系统运维工作中常用的正则表达式
常用的正则表达式的命令为grep(egrep),sed,awk。
linux的三剑客很牛,要想三剑客玩得更好,那就一定离不开正表达式。
b.linux正则表达式和我们命令行中其他的命令使用的通配符是有本质区别的。
4.实验的3个注意事项:
a.linux正则一般以行为单位处理的。
b.alias grep='grep --color=auto'
c.注意字符集,LC_ALL=C,不是必须
5.linux正则表达式细节
基于grep来讲的。
基础正则表达式:BRE(basic regular expression)
1)^word 表示搜索以word开头的内容。
2)word$ 表示搜索以word结尾的内容。
3)^$ 表示空行,不是空格。
4). 代表且只能代表任意一个字符。(当前目录,加载文件)
5)\ 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型。
例如:\.只表示小数点,还原原始小数点的意义。
6)* 重复0个或多个前面的一个字符。不代表所有了。
7).* 匹配所有的字符。^.* 任意多个字符开头。
8)[abc] 匹配字符集合内任意一个字符[a-z]
9)[^abc] ^再中括号里面表示非,不包含a或b或c。
10){n,m} 重复n到m次,前一个字符。
{n,} 至少N次,多了不限。
{n} N次
{,m} 至多m次,少了不限。
注意:grep 要对{转义} \{\},egrep(grep -E)不需要转义
基础的正则就讲完了。
6.grep命令参数小结
-v 排除匹配的内容
-E 支持扩展的正则表达式
-i 忽略大小写
-o 只输出匹配的内容
--color=auto 匹配的内容显示颜色。
-n 再行首显示行号
7.取IP地址练习正则:
sed基本语法:
s替换
g全局
-i 修改文件
-n 取消默认输出
p 打印内容
-r 支持扩展正则
考题:
ifconfig eth0:
inet addr:10.0.0.7 Bcast:10.0.0.255 Mask:255.255.255.0
目标:10.0.0.7
过滤思想:
目标之前的内容“ inet addr:” 就用 ^.*addr:
目标结尾的内容" Bcast:10.0.0.255 Mask:255.255.255.0" 就用Bc.*$
命令实战:
特殊直接sed取行*:
[root@oldboylinux oldboy]# ifconfig eth0|sed -n '2s#^.*addr:##gp'|sed 's# Bc.*$##g'
10.0.0.7
[root@oldboylinux oldboy]# ifconfig eth0|sed -n '2s#^.*addr:\(.*\) Bc.*$#\1#gp'
10.0.0.7
[root@B ~]# ifconfig eth0|sed -rn '2s#^.*addr:(.*) Bc.*$#\1#gp'
10.0.0.8
[root@oldboylinux oldboy]# ifconfig eth0|sed -n '2s#^.*addr:\([0-9]\{,3\}\.[0-9]\{,3\}\) Bc.*$#\1#gp'
10.0.0.7
考题:
请用ifconfig,输出ip及广播地址
sed -n 's#\(dddd\)\(ffff\)#\1\2#gp' 同样适合grep。
命令:
[root@B ~]# ifconfig eth0|sed -nr 's#^.*dr:(.*) [a-zA-Z].*t:(.*) Ma.*$#\1\2#gp'
10.0.0.8 10.0.0.255
扩展的正则表达式:grep -E 以及egrep
后期有机会再分享吧!
下面是后补的,讲座没时间讲了。
8.扩展的正则表达式:ERE1)+ 重复一个或一个以上前面的字符。2)? 重复0个或一个0前面的字符。3)|用或的方式查找多个符合的字符串4)() 找出 “用户组”字符串。另外一个了解的知识:posix方括号字符集(挺鸡肋的知道就得) [:alnum:] [:lower:] [:xdigit:] [:alpha:] [:print:] [:blank:] [:blank:] [:punct:] [:cntrl:] [:space:] [:graph:] [::upper:]5)man bash man grep