Linux 正则表达式

标注:本教程只针对linux运维的三剑客命令awk,sed,grep正则表达式

什么是正则表达式?

  简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法通过定义的这些特殊符号的辅助,

系统管理员就可以快速过滤,替换或输出需要的字符串,linux正则表达式一般以行为单位处理

为什么要学会正则表达式?

  在企业工作中,我们每天做的linux运维工作中, 时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,

而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的特定字符串。这就要靠正则表达式。因此,可以说正则

表达式就是为过滤这样字符串的需求而生Llinux最常应用的正则表达式的命令 grep(egrep)/sed/awk,换名话说linux三剑客要想能

工作的更高效,那一定离不开正则表达式配合。

正则表达式注意事项

1、linux正则表达式一般以行为单位处理的

2、设置别名alias grep='grep --color=auto',让匹配的内容显示颜色

3、注意字符集,使用LC_ALL=C,在/etc/profile配置文件最后添加一行export LC_ALL=C

4、注意使用单引号和双引号,建议使用双引号

普通正则表达式BRE

字符

功能

举例

^

^w匹配以w开头的内容

范例1

$

w$匹配以w结尾的内容

范例1

^$

显示空行

范例1

.

只能代表任意一个字符

范例1

\

转义字符,例如\.仅代表点 .

范例1

*

重复0个或多个前面的一个字符,例如 w*匹配没有w或1个w或多个w

范例1

. *

匹配所有

范例2

[abc]

匹配括号内的任意一个字符,其它写法[a-zA-Z]

范例2

[^abc]

不匹配括号内的任意一个字符,其它写法[a-zA-Z]

范例2

a\{n,m\}

重复n到m次,前一个重复的字符

范例3

a\{n,\}

重复最少n次,前一个重复的字符

范例3

a\{n\}

重复n次,前一个重复字符

范例3

a\{,m\}

重复最多m次,前一个重复字符

范例3

扩展正则表达式ERE

字符

功能

举例

|

扩展正则表达式 egrep 或 grep –E,取多个不同的匹配字符

范例5

a{n,m}

重复n到m次,前一个重复的字符

范例3

a{n,}

重复最少n次,前一个重复的字符

范例3

a{n}

重复n次,前一个重复字符

范例3

a{,m}

重复最多m次,前一个重复字符

范例3

\b

元字符,单词边界

范例4

+

匹配前面一个字符1次或1次以上

?

匹配前一个字符0次或1次

举例(以grep为例子讲解)

[root@oldboy ~]# cat file.txt

I am oldboy 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 1300052.

not 130000052.

my god,i am not oldboy,but OLDBOY!

范例1:

[root@oldboy ~]# grep "^my" file.txt

my blog is http://oldboy.blog.51cto.com

my qq num is 1300052.

my god,i am not oldboy,but OLDBOY!

[root@oldboy ~]# grep "com$" file.txt

my blog is http://oldboy.blog.51cto.com

[root@oldboy ~]# grep -n "^$" file.txt

3:

8:

[root@oldboy ~]# grep "13...52" file.txt

my qq num is 1300052.

[root@oldboy ~]# grep "//" file.txt

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

[root@oldboy ~]# grep "\/\/" file.txt

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

[root@oldboy ~]# grep '//' file.txt

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

[root@oldboy ~]# grep "130*52" file.txt

my qq num is 1300052.

not 130000052.

范例2:

[root@oldboy ~]# grep ".*" file.txt

I am oldboy 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 1300052.

not 130000052.

my god,i am not oldboy,but OLDBOY!

[root@oldboy ~]# grep "^my.*" file.txt

my blog is http://oldboy.blog.51cto.com

my qq num is 1300052.

my god,i am not oldboy,but OLDBOY!

[root@oldboy ~]# grep "org.*$" file.txt

our site is http://www.etiantian.org

[root@oldboy ~]# grep "[0-9]" file.txt

my blog is http://oldboy.blog.51cto.com

my qq num is 1300052.

not 130000052.

[root@oldboy ~]# grep "[^a-z]" file.txt

I am oldboy 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 1300052.

not 130000052.

my god,i am not oldboy,but OLDBOY!

范例3:

[root@oldboy ~]# grep -E "0{4,5}" file.txt

not 130000052.

[root@oldboy ~]# grep -E "0{4,}" file.txt

not 130000052.

[root@oldboy ~]# grep -E "0{3}" file.txt

my qq num is 1300052.

not 130000052.

[root@oldboy ~]# grep -E "0{,4}" file.txt

I am oldboy 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 1300052.

not 130000052.

my god,i am not oldboy,but OLDBOY!

范例4:

[root@oldboy ~]# echo 2oldboy >> file.txt

[root@oldboy ~]# echo 3oldboy4 >> file.txt

[root@oldboy ~]# grep "oldboy" file.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god,i am not oldboy,but OLDBOY!

2oldboy

3oldboy4

[root@oldboy ~]# grep "\boldboy" file.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god,i am not oldboy,but OLDBOY!

[root@oldboy ~]# grep "\boldboy\b" file.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god,i am not oldboy,but OLDBOY!

范例5:

[root@oldboy ~]# grep -E "[0-9]|qq|linux" file.txt

I teach linux.

my blog is http://oldboy.blog.51cto.com

my qq num is 1300052.

not 130000052.

2oldboy

3oldboy4

[root@oldboy ~]# egrep "[0-9]|qq|linux" file.txt

I teach linux.

my blog is http://oldboy.blog.51cto.com

my qq num is 1300052.

not 130000052.

2oldboy

3oldboy4

Linux正则表达式结合三剑客企业级实践

1、取系统IP地址

替换功能

sed ‘s#支持正则位置##g’   file

sed  -n ‘s#支持正则位置##gp’  file

[root@oldboy ~]# ifconfig eth3

eth3      Link encap:Ethernet  HWaddr 00:0C:29:A7:4E:51

inet addr:10.8.9.65  Bcast:10.8.9.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fea7:4e51/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:134218 errors:0 dropped:0 overruns:0 frame:0

TX packets:31049 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:13502212 (12.8 MiB)  TX bytes:2379801 (2.2 MiB)

[root@oldboy ~]# ifconfig eth3 | sed -n '2p'|sed 's#^.*dr:##g'|sed 's#  B.*$##g'

10.8.9.65

[root@oldboy ~]# ifconfig eth3 | sed -n '2s#^.*dr:##gp' | sed 's#  B.*$##g'

10.8.9.65

2、sed后向引用

sed -n  's#()()#\1\2#gp'  file

当在前面匹配部分用小括号的时候,第一个括号内容,可以在后面的部分用\1输出。

第二个括号内容,可以在后面的部分用\2输出

[root@oldboy ~]# ifconfig eth3

eth3      Link encap:Ethernet  HWaddr 00:0C:29:A7:4E:51

inet addr:10.8.9.65  Bcast:10.8.9.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fea7:4e51/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:134828 errors:0 dropped:0 overruns:0 frame:0

TX packets:31546 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:13565103 (12.9 MiB)  TX bytes:2431777 (2.3 MiB)

[root@oldboy ~]# ifconfig eth3 | sed -nr 's#^.*dr:(.*)  Bc.*$#\1#gp'

10.8.9.65

[root@oldboy ~]# stat /etc/hosts | sed -nr 's#^.*ess: \((.*)\/-.*$#\1#gp'

0644

[root@oldboy ~]# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd | head -4

/bin/bash:x:0:0:root:/root:root

/sbin/nologin:x:1:1:bin:/bin:bin

/sbin/nologin:x:2:2:daemon:/sbin:daemon

/sbin/nologin:x:3:4:adm:/var/adm:adm

Linux 正则表达式_010的更多相关文章

  1. linux正则表达式之-基础正则表达式(基于grep)

    linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或 ...

  2. 关于清晰讲解linux正则表达式的博文分享

    http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html  linux shell 正则表达式(BREs,EREs,PREs)差异比 ...

  3. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  4. 【Linux】linux正则表达式及通配符

    正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.拥有强大的字符搜索功能.也非常方便的搜索过滤出我们想要的内容. linux正则表达式分为基本正则表达式(Basic Regexp)和扩展 ...

  5. linux正则表达式(基础正则表达式+扩展正则表达式)

    正则表达式应用非常广泛,例如:php,Python,java等,但在linux中最常用的正则表达式的命令就是grep(egrep),sed,awk等,换句话 说linux三剑客要想能工作的更高效,就一 ...

  6. linux 正则表达式和通配符

    linux 正则表达式和通配符 通配符用于查找文件 包含三种:  * ? [] * 代表任意个任意字符 ? 代表任意一个字符 [] 代表中括号中的一个字符 正则表达式(正则是包含匹配,只要包含就可以匹 ...

  7. 七 、linux正则表达式

    为处理大量的字符串而定义的一套规则和方法 1)linux正则表达式以行为单位处理 2)alians grep = “grep –color=auto”,让匹配的内容显示颜色 3)注意字符集,expor ...

  8. (转)linux正则表达式详解

    linux正则表达式详解 http://blog.csdn.net/wuliowen/article/details/64131815 1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法 ...

  9. linux正则表达式企业级深度实践案例1

    linux正则表达式结合三剑客企业级实践: 1.取系统ip [root@redhat~]#  ifconfig  eth0 解答: 替换命令: sed  's#支持正则位置##g'  file 先取第 ...

随机推荐

  1. Redis 数据变化通知服务实践

    从Redis 2.8.0版本起,Redis加入了“Keyspace notifications”(即“键空间通知”)的功能.键空间通知,允许Redis客户端从“发布/订阅”通道中建立订阅关系,以便客户 ...

  2. 通过pip安装python web

    提示 No module named 'utils' 我就pip install utils 提示 No module named 'db' 然后我就 pip install db 报错 No mod ...

  3. ruby安装方法

    安装 Ruby Ruby官网下载:http://www.ruby-lang.org/en/downloads/(官网下载链接) 安装过程中,得注意,勾选上添加到环境变量 安装完成后,查看是否安装成功 ...

  4. hihocoder1696 折线中点(几何)

    https://hihocoder.com/problemset/problem/1696 求折线中点,一开始想成先求横坐标中点了,肯定是错的. 一定要从线段长度求中点,然后中点公式推了好久.. #i ...

  5. MAC终端密钥登录自动输入密码

    升级MAC系统后,发现用于MAC终端ssh服务器的登录脚本无法正常执行了,表现为:需要手动输入密钥密码,于是重新整理一下,恢复正常,在此记录一下: #!/usr/bin/expect -fspawn ...

  6. DBS:CUPhone

    ylbtech-DBS:CUPhone 1.返回顶部 1. USE master GO -- Drop the database if it already exists IF EXISTS ( SE ...

  7. Win7 32位下cocos2dx android开发调试环境

    1.使用环境 win7 32位 + vs2010 2.软件准备(下方绿色文字带链接) cocos2dx-v2.2.2 jdk7 android sdk android ndk adt bundle a ...

  8. libreoffice python 操作word及excel文档

    1.开始.关闭libreoffice服务: 开始之前同步字体文件时间,是因为创建soffice服务时,服务会检查所需加载的文件的时间,如果其认为时间不符,则其可能会重新加载,耗时较长,因此需事先统一时 ...

  9. glog日志库使用笔记

    日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活. 在Github上下载glog,解压 ...

  10. 字符串截取mysql

    2017-05-26 --SUBSTR(addtime, 1, 10) --substr(string string,num start,num length); --string为字符串 --sta ...