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、实战举例
扩展的正则表达式:ERE(Extended Regular Expressions)
+ 重复一个或一个以上前面的字符
? 重复0个或一个前面的字符
| 用或的方式查找多个符合的字符串
() 分组过滤,后向引用
7、实战举例
简单地说,正则表达式就是为处理大量的字符串而定义的一套规则和方法
例如:假设“@”代表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
相关文章推荐
- sersync代替inotify实现服务器之间实时同步(CentOS 6.7)
- Linux select/poll和epoll实现机制对比
- Saltstack安装部署(CentOS 6.7)
- Linux服务器时间同步
- 第十四天-linux命令及基础知识实战
- 制作initrd(2):update-initramfs和mkinitramfs脚本分析
- linux 远程同步数据工具rsync (2)
- linux下建立软链接
- linux 常用基础命令 tar 详细介绍
- Centos6.4 本地yum源配置
- 如何判断Linux是32位还是64位
- 为程序员私人定制的操作系统-Linux
- Linux添加用户(user)到用户组(group)
- TQ210V6开发平台从WIN7和Linux下使用USB更新系统方法
- centos配置mysql
- Linux下编程实用方法-编译源代码出错解决
- linux 远程同步数据工具rsync (1)
- 将kali安装到U盘中
- Android与linux的区别与联系
- xmanager 图形界面安装设置进入CentOS6.5系统--crazychao