linux运维正则表达式技术

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux运维正则表达式技术相关的知识,希望对你有一定的参考价值。

linux运维正则表达式实战视频观看地址
http://edu.51cto.com/course/course_id-1959.html
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取行*:
[[email protected] oldboy]# ifconfig eth0|sed -n ‘2s#^.*addr:##gp‘|sed ‘s#  Bc.*$##g‘
10.0.0.7
[[email protected] oldboy]# ifconfig eth0|sed -n ‘2s#^.*addr:\(.*\)  Bc.*$#\1#gp‘
10.0.0.7
[[email protected] ~]# ifconfig eth0|sed -rn ‘2s#^.*addr:(.*)  Bc.*$#\1#gp‘
10.0.0.8
[[email protected] oldboy]# ifconfig eth0|sed -n ‘2s#^.*addr:\([0-9]\{,3\}\.[0-9]\{,3\}\.[0-9]\{,3\}\.[0-9]\{,3\}\)  Bc.*$#\1#gp‘
10.0.0.7

考题:
请用ifconfig,输出ip及广播地址
sed  -n ‘s#\(dddd\)\(ffff\)#\1\2#gp‘ 同样适合grep。
命令:
[[email protected] ~]# 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.扩展的正则表达式:ERE
1)+ 重复一个或一个以上前面的字符。
2)? 重复0个或一个0前面的字符。
3)|用或的方式查找多个符合的字符串
4)() 找出 “用户组”字符串。
另外一个了解的知识:posix方括号字符集(挺鸡肋的知道就得)
       [:alnum:]             [:lower:]          [:xdigit:]
       [:alpha:]             [:print:]            [:blank:]
       [:blank:]             [:punct:]
       [:cntrl:]             [:space:]
       [:graph:]             [::upper:]
5)man bash
   man grep


本文出自 “chenqj” 博客,请务必保留此出处http://chenqj.blog.51cto.com/13330293/1973597

以上是关于linux运维正则表达式技术的主要内容,如果未能解决你的问题,请参考以下文章

Linux 正则表达式

Linux运维正则表达式之sed

Linux中grep,egrep正则表达式基本用法

linux学习20 运维核心技能-grep命令与基本正则表达式

shell那点事儿——运维工程师必会正则表达式及文本处理三剑客

Linux运维学习笔记-通配符及正则表达式知识总结