您的位置:首页 > 运维架构 > Linux

Linux正则表达式

2015-11-26 02:03 435 查看
1、什么是正则表达式?
简单地说,正则表达式就是为处理大量的字符串而定义的一套规则和方法
例如:假设“@”代表oldboy,“!”代表oldgirl,echo “@!” === “oldboyoldgirl”
通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串,linux正则表达式一般以行为单位处理的。
2、为什么要学会正则表达式?
在企业工作中,我们每天做的linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要,从大量的字符串内容中超找符合工作需要的特定的字符串。这就要靠正则表达式。因此,可以说正则表达式就是为过滤这样字符串的需要而生的!
例如:ifconfig的输出取IP,例如:cat /var/log/messages输出等。
3、容易混淆的两个注意事项
正则表达式应用非常广泛,存在于各种语言中,例如:php,python,java等。但是,我们今天讲的是linux系统运维工作中的正则表达式,即linux正则表达式。
最常应用正则表达式的命令就是grep(egrep)、sed、awk,换句话说linux三剑客要想工作的更高效,那一定离不开正则表达式配合的。
正则表达式和我们常用的通配符特殊字符是有本质区别的。
通配符例子: ls *.log这里的*就是通配符(表示所有),不是正则表达式
注意事项:
1)linux正则一般以行为单位处理的
2)定义别名alias grep='grep --color=auto',以grep为例
3)注意字符集,LC_ALL=C
4、基础正则表达式
基础正则表达式:元字符意义 BRE(basic regular expression)
^word 表示搜索以word开头的内容
word$ 表示搜索以word结尾的内容
^$ 表示空行,不是空格
. 在正则里表示且只能表示任意一个字符↓

其他含义:1、当前目录;2、使得文件生效,相当于source;3、隐藏文件
\ 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型
* 重复0个或多个前面的一个字符
.* 匹配所有的字符,包括空行。^.*任意多个字符开头
[abc] 匹配字符集合内任意一个字符
[^abc] ^在括号内表示非,不包含括号内的任意一个字符集和
{} {n,m}重复前一个字符n到m次
{n,}重复前一个字符至少n次
{n}重复前一个字符n次
{,m}重复前一个字符至多m次(CentOS6.7开始可以)
注意:grep需要对{}转义\{\},egrep(grep -E)不需要转义

5、实战举例

[root@lamp02 oldboy]# cat oldboy.log
I am oldboy1 teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep "^m" oldboy.log
my blog is http://oldboy.blog.51cto.com my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep "m$" oldboy.log
my blog is http://oldboy.blog.51cto.com [root@lamp02 oldboy]# grep "^$" oldboy.log
[root@lamp02 oldboy]# grep "." oldboy.log
I am oldboy1 teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep "\." oldboy.log
I teach linux.
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448.
not 4900000448.
[root@lamp02 oldboy]# grep ".*" oldboy.log
I am oldboy1 teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep "[0-9]" oldboy.log
I am oldboy1 teacher!
my blog is http://oldboy.blog.51cto.com my qq num is 49000448.
not 4900000448.
[root@lamp02 oldboy]# grep "[^0-9]" oldboy.log
I am oldboy1 teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep -E "0{1,2}" oldboy.log
my qq num is 49000448.
not 4900000448.
6、扩展正则表达式

扩展的正则表达式:ERE(Extended Regular Expressions)
+ 重复一个或一个以上前面的字符
? 重复0个或一个前面的字符
| 用或的方式查找多个符合的字符串
() 分组过滤,后向引用
7、实战举例
[root@lamp02 oldboy]# grep -E "o+" oldboy.log
I am oldboy1 teacher!
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep -E "0+" oldboy.log
my qq num is 49000448.
not 4900000448.
[root@lamp02 oldboy]# grep -E "0?" oldboy.log
I am oldboy1 teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep -E "oldboy|oldbey" oldboy.log
I am oldboy1 teacher!
my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY!
[root@lamp02 oldboy]# grep -E "old(boy|bey)" oldboy.log
I am oldboy1 teacher!
my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY!
元字符:\b单词的边界
[root@oldboy oldboy]# grep "oldboy" oldboy.log
I am oldboy1 teacher!
my blog is http://oldboy.blog.51cto.com [root@oldboy oldboy]# grep "\boldboy\b" oldboy.log
my blog is http://oldboy.blog.51cto.com[/code] 
本文出自 “万越天的架构师之路” 博客,请务必保留此出处http://wanyuetian.blog.51cto.com/3984643/1716936
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: