第2章 正则表达式

Day16,

12.26&12.27

linux运营正则表明式实战录像收看地址

QQ交流群 384467551

1.1 正则表达式

搜寻文本内容,火速过滤

第三章 扩大正则表明式

正则表达式

linux运转正则表明式实战

1.2 正则表明式分类

1.1  + 前叁个字符一而再出现了三次或三遍以上

egrep  “0+” oldboy.txt  1次或1次以上 >=1

egrep  “0*” oldboy.txt  0次或0次以上 >=0

第1章 使grep/egrep 过滤出的东西加上颜色

cat
>>/etc/profile<<EOF

alias
grep=’grep –color=auto’

alias egrep=’egrep
–color=auto’

EOF

 

source
/etc/profile

alias grep egrep

1.如何是正则表明式?
归纳的说,正则表明式正是一套处理多量的字符串而定义的条条框框和格局。
例如:假设 @代表12345 
由此正则表达式那几个特殊符号,大家能够神速的过滤、替换需求的始末。
linux正则一般以行为单位拍卖的。

1.2.1 基础正则

^    以…...开头的行 ^m

$    以…...结尾的行 m$

^$   空行(什么符号都没有)

.     任意一个字符,不会匹配空行

\     (撬棍)转义字符

*     前一个字符连续出现0次或0次以上

.*     所有字符,包括空行

[]     相当于一个符号,每次匹配1个字符

[abc]  找出包含a或b或c

[^]    排除,排除[]里的每一个字符

[^abc] 找出除了a或除了b或除了c外

 

 

1.1.1 找到文本中的0

[[email protected]
~]# egrep  “0+” oldboy.txt

my qq num is 49000448.

not 4900000448.

[[email protected]
~]# egrep -o  “0+” oldboy.txt

000

00000

 

第2章 正则表明式分类

2.为啥要读书正则表明式?
再工作中,我们做linux运转为工人身份作,时刻面对着大量的日记,程序,命令的输出。
情急的内需过滤我们要求的一部分内容,甚至是七个字符串。

1.2.2 扩充正则

+     前一个字符连续出现1次或1次以上

|      或者

()     表示一个整体   sed反向引用/后向引用

{}       0{n,m} 数字0连续出现了至少n次,最多m次

?      前一个字符连续出现0次或1次   前一个字符有或没有

 

1.1.2 取出文件中的大写字母

[[email protected]
~]# grep -o “[A-Z]” oldboy.txt

I

I

I

O

L

D

B

O

Y

2.1 基础正则表达式:basic    regular expression  BRE

    ^  $  .  *  []  [^]   \

    

3.明了五个误区注意事项:
a.正则表达式的采纳越发常见,存在于种种语言中,PERubiconL,PHP,JAVA等。
咱俩明天给大家讲解的正是linux的正则表达式,系统运行工作中常用的正则表明式
常用的正则表明式的一声令下为grep(egrep),sed,awk。
linux运行正则表达式技术分享,正则表明式。linux的三杀手很牛,要想三杀手玩得更好,那就必然离不开正表明式。

1.3 基础正则与增添正则的界别

1.1.3 取出三番五次出现的大写字母

[[email protected]
~]# egrep -o “[A-Z]+” oldboy.txt

I

I

I

OLDBOY

2.2 扩张正则表明式:extended regular expression  ERE

    |  +  ()  {}  ?

 

b.linux正则表明式和大家命令行中其它的下令使用的通配符是有本质分化的。

1.3.1 符号分歧

基础正则: ^   $   ^$   .    .*    []    [^]

扩展正则: +   |   ()   {}   ?

 

1.1.4 展现全部的单词

[[email protected]
~]# egrep -o “[A-Za-z]+” oldboy.txt

I

am

oldboy

teacher

2.3 正则与通配符差距:

          效能                    支持的指令

通配符:   查找文件名
             Linux超过一半指令都帮助  以.txt结尾的公文       

 

正则:     在文件中过滤内容
       sed,grep,awk  Python Java

 

4.实验的三个注意事项:
a.linux正则一般以行为单位拍卖的。
b.alias grep=’grep –color=auto’
c.注意字符集,LC_ALL=C,不是必须

1.3.2 帮衬的一声令下不一样

基础正则:grep  sed  awk

扩展正则:egrep(grep  -E)    sed –r      awk

 

1.2  | 或者

表示找个中的一个可能是其它3个。

[[email protected]
~]# egrep “oldboy|oldbey” oldboy.txt  -o

oldboy

oldboy

oldbey

找/etc/services 中的五个端口

[[email protected]
~]# egrep “3306|1521” /etc/services

mysql           3306/tcp                        # MySQL

mysql           3306/udp                        # MySQL

ncube-lm        1521/tcp                # nCube License Manager

ncube-lm        1521/udp                # nCube License Manager

       找在那之中的A大概B只怕C。

[[email protected]
~]# egrep “A|B|C” oldboy.txt

my god ,i am not oldbey,but OLDBOY!

       找到12照旧56替换来空。

[[email protected]
~]# echo 123456|sed -r ‘s#12|56##g’

34

2.4 使用正则说明式注意事项

  1.正则表明式根据行为单位处理

  2.正则神坑-汉语符号

   ‘’ “” () 。 * …… ¥ | {}
 【】

    ”   “”   ()  .  *  ^    $ | {}   []

3.区分高低写

 

环境 

cat oldboy.txt

I am oldboy
teacher!

I teach linux.

 

I like badminton ball
,billiard ball and chinese chess!

my blog is

our size is

my qq is 49000448

 

not 4900000448.

my god ,i am not
oldbey,but OLDBOY!

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 再行首突显行号

1.4 ^ 以….开端的行 ^m

 

[root@zeq /oldboy]# grep '^m'  oldboy.txt

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

my qq is 49000448

my god ,i am not oldbey,but OLDBOY!

 

1.3 () 小括号 反向引用

小括号内部的剧情是一个完好无损,也便是是二个字符 

第3章 基础正则(BRE)

7.取IP地址练习正则:

1.5 $ 以….结尾的行  $

 

cat -A 显示文件中所有符号  每行结尾都会有个$

[root@zeq /oldboy]# grep  ' $'  oldboy.txt

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

our size is http://blog.oldboyedu.com

 

1.3.1 表示1个全体

[[email protected]
~]# egrep “oldb(o|e)y” oldboy.txt

I am oldboy teacher!

my blog is

my god ,i am not oldbey,but OLDBOY!

3.0.1 ^   以……发轫的行

      grep  ‘^m’ /oldboy.txt
        以m早先的行

sed基本语法:
s替换
g全局
-i 修改文件
-n 打消私下认可输出
 p 打字与印刷内容
-r 协理扩展正则

1.6 . 任意叁个字符,不会同盟空行

[root@zeq /oldboy]# grep  '.' oldboy.txt

grep –o                                          grep命令执行过程

[root@oldboyedu50-lnb /oldboy]# grep -o '.' oldboy.txt

 

1.3.2 反向引用

       sed -r 使用扩大正则

[[email protected]
~]# echo 123456|sed -r ‘s#..(..)..#\1#g’

34

       点表示任意三个字符,\2意味第3个括号。

[[email protected]
~]# echo 123456|sed -r ‘s#(.).(..).(.)#\2#g’

34

3.0.2 $   以……结尾的行         

grep  ‘m$’ /oldboy.txt

考题:
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\}\.[0-9]\{,3\}\.[0-9]\{,3\}\) 
Bc.*$#\1#gp’
10.0.0.7

1.7 + 前二个字符延续出现1遍或1遍以上

[root@zeq /oldboy]# egrep '0+' oldboy.txt

my qq is 49000448

not 4900000448.

 

1.4 {} 大括号(花括号)

0{n,m} 数字0三番五次出现了最少n次,最多m次

[[email protected]
~]# egrep “[a-z]{3,6}” oldboy.txt

I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is
our site is
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

 

[[email protected]
~]# egrep “[a-zA-Z]{3,6}” oldboy.txt

I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is
our site is
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[[email protected]
~]#

神坑:::::有的行结尾有时候会多少个空格

   cat   -A   呈现出文件中的特殊标记    行尾   $标记

 

考题:
请用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

1.8 | 或者

[root@zeq /oldboy]# egrep 'oldboy|linux'   oldboy.txt

I am oldboy teacher!

I teach linux.

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

our size is http://blog.oldboyedu.com

 

1.4.1 大括号的例外方法

 0{3,6}   >=3 <=6

 0{3}     ==3

 0{3,}    >=3

 0{,6}    >=0 <=6

3.0.3 ^$  空行  什么都不曾(包蕴空格也从不)

grep -v ‘^$’ oldboy.txt
   排除文件中的空行

grep
 -n   展现行号  

扩大的正则表达式: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

1.9 – () 表示多少个完整  反向引用/后向引用

1.5  ?

前五个字符再而三出现了 0次或一回

3.0.4  .  任意三个字符     不会合营空行

grep  ‘.’ oldboy.txt
   

grep
 -o      展现命令执行进度,显示grep命令每三次找到了怎样

 澳门金沙国际 1  空格也实践一遍命令

 

1.9.1 表示二个完好无损

[root@zeq /oldboy]# egrep 'oldb(o|e)y'  oldboy.txt

I am oldboy teacher!

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

our size is http://blog.oldboyedu.com

my god ,i am not oldbey,but OLDBOY!

 

1.5.1 环境

[[email protected]
~]# cat a.log

good

gd

god

goood

3.0.5 * 前3个字符两次三番出现了0次或0次以上

grep ‘0*’
 oldboy.txt

澳门金沙国际 2 

坑:过滤的对象出现了0次的时候,会议及展览示全部文件的剧情

 

1.9.2 反向引用/后向引用

[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'

<123456>                                                    \1 表示第一个括号

 

1.5.2 o再而三出现0次或二遍

[[email protected]
~]# egrep “gd|god” a.log

gd
god

[[email protected]
~]# egrep “go?d” a.log

gd
god

3.0.6 .*    全部 任何标志  包罗空行

贪婪性    (  .  *
 .*  +  ?  )  

1. .*富有符号 任何标志 接二连三出现的字符
 有稍许匹配多少

2. 正则表达 全体符号 或 三番五次出现 会表现出贪婪性

3. 同盟到最终一个适合的规则———(贪婪性)  

澳门金沙国际 3 

找出以m初始并以m结尾的行     —- 并且

[root@oldboy oldboy]#
grep ‘^m.*m$’ oldboy.txt

my
blog is

 

 

1.10 {} 0{n,m} 数字0一连出现了最少n次,最多m次

[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt

my qq is 49000448

not 4900000448.



[root@oldboyedu50-lnb /oldboy]# cat id.txt

金 211324198705244720

万 500224197105168312

任 1231231231oldboy

任 3oldboy

任 lidao97303136098

任 alex2197303136098

任 350182197303oldgir

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

向 14052219961008852X





[root@oldboyedu50-lnb /oldboy]# egrep '[0-9X]{18}' id.txt

金 211324198705244720

万 500224197105168312

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

   XXXXXXXXXXXXXXXXXX

向 14052219961008852X



[root@oldboyedu50-lnb /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt

金 211324198705244720

万 500224197105168312

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

向 14052219961008852X

 

1.6 正则表达式分类

3.0.7 \  撬棍   转义字符   脱掉马甲打回原形

找出文件中以.结尾的行

[root@oldboy log]#
grep ‘\.$’ /oldboy/oldboy.txt

I teach
linux.

not
4900000448.

tr命令       1.无法直接修改文件内容

                2.一对一替换

   特点         3.不可能间接读取文件内容 接 <

\n
   =====回车

例:把公文中的空格替换为回车    

[root@oldboy oldboy]#
tr ‘\n’ ‘ ‘
oldboy.txt       回车替换为空格

tr: extra operand
`oldboy.txt’             tr不能够直接读取文件
   

Try `tr –help’ for
more information.      必须加<输入重定向符号

[root@oldboy oldboy]#
tr ‘\n’ ‘ ‘
<oldboy.txt 

I am oldboy teacher! I
teach linux.  I like badminton ball ,billiard ball and chinese chess! my
blog is our size is
my qq is 49000448  not 4900000448. my god ,i
am not oldbey,but OLDBOY!

报错:tr命令不或许直接读取文件   必须加<      不能够改改文件内容

替换:把123替换为abc                sed 阉割版

[root@oldboy oldboy]#
echo 123123|tr ‘123’ ‘abc’

abcabc

一对一沟通

[root@oldboy oldboy]#
echo 12332|tr ‘123’ ‘abc’

abccb

第2章 取出eth0网卡的ip地址

1.6.1 基础正则

^       以……开头

$       以……结尾

^$     空行

.*      所有

[abc]   表示abc

[a-z]   表示a到z

[A-Z]   表示A-Z

[^abc]  表示免除abc

3.0.8 [ ]    [abc] 找出含有a或b或c的行   []字符内没有新鲜含义

                                单个字符分割,以”或”连接

找出以小写字母开首并以.或!结尾的行

[root@oldboy oldboy]#
grep ‘^[a-z].*[.!]$’ oldboy.txt

not
4900000448.

my god
,i am not oldbey,but OLDBOY!

 

2.1 方法1

[root@zeq /oldboy]# ip a s eth0 |awk 'NR==3'|awk  -F"[ /]+"  '{print $3}'

10.0.0.200

[root@oldboyedu50-lnb /oldboy]#

 

1.6.2 扩展正则表达式

+      三番五次出现 二回或壹回以上

|       或者

()      小括号内部的内容是1个整机,相当于是3个字符

{}      0{n,m} 数字0一连出现了至少n次,最多m次

?       前一个字符一而再出现了 0次或二遍

 

3.0.9 [^]   排除,相当于是贰个标志(每一遍匹配一个字符)  排除a或b或c   

找出文件中不是以m或n初阶的行

[root@oldboy oldboy]#
grep ‘^[^mn]’ oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard
ball and chinese chess!

our size is

 grep/egrep
‘[a-Z]’

2.2 取出ifconfig eth0 ip地址和子网掩码

[root@zeq /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"[ :]+"  '{print $4,$NF}'

10.0.0.200 255.255.255.0

 

第2章 取出eth0网卡的ip地址

第4章 恢宏正则(ERE)

2.1 思路

1)先固定 取出第贰行

2)取出ip地址

4.0.1 +   前一个字符接二连三出现一次或频仍

grep -E ===egrep

[root@oldboy log]#
egrep ‘0+’ /oldboy/oldboy.txt

my qq is 49000448

not 4900000448.

 

+小结:

1.前1个字符三番五次出现一次或1回以上

2.+一般与[]进行同盟

 

 

例题:

lidao.×××

cat id.txt

汤 610702199107053598

邹 371481199403259478

莫 52020319810613433X

韩 460106199111137270

荣 530124197504135438

荣 oldboy

荣 babygirl

荣 530124197504135438

阮 360702197902169951

翁 331002198504132813

任 621223198708245176

姜 370602198507189574

霍 320904198403048179

怎么判断用户的×××号码是不是科学?

特殊符号支持大家处理公事====正则表明式

在文件中过滤出您想要的或不想要的始末

解答:   egrep
‘[0-9X]+’  id.txt

[root@oldboy log]#
egrep ‘[0-9X]+’ /oldboy/id.txt

汤 610702199107053598

邹 371481199403259478

 

2.1.1 看eth0的内容

[[email protected]
~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:A8:E4:14 

          inet addr:10.0.0.201  Bcast:10.0.0.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fea8:e414/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

          collisions:0 txqueuelen:1000

          RX bytes:14324203 (13.6 MiB)  TX bytes:26220378 (25.0 MiB)

4.0.2  |   或者

找出3306或1521端口服务

[root@oldboy log]#
egrep
‘3306|1521’ /etc/services

mysql
          3306/tcp                        #
MySQL

mysql
          3306/udp                        #
MySQL

ncube-lm
       1521/tcp                # nCube
License Manager

ncube-lm
       1521/udp                # nCube
License Manager

 

2.2 方法一 sed 去头去尾

用sed命令,将在那之中不要求出示的,稳步替换。

[[email protected]
~]#  ifconfig eth0|sed -n ‘2p’|sed ‘s#^.*dr:##g’|sed ‘s#
.*$##g’

10.0.0.201

4.0.3 ()   表示1个整机   反/后向引用

找出文件中蕴涵oldboy或oldbey的行

[root@oldboy log]#
egrep ‘oldb(o|e)y’ /oldboy/oldboy.txt

I am oldboy teacher!

my blog is

our size is
http://blog.oldboyedu.com

my god ,i am not
oldbey,but OLDBOY!

 

2.3 方法二sed 反向引用 

反向替换,使用()把ip地址爱护起来,\1主旋律选用,显示出来ip。

[[email protected]
~]# ifconfig eth0|sed -nr ‘2s#^.*dr:(.*)  Bc.*$#\1#gp’

10.0.0.201

       简写

第一章 扩充正则表达式 1.1 +
前七个字符连续出现了 1 次或 1 次以上 egrep “0+” oldboy.txt 1 次或 2回以上 =1 egrep “0*” oldboy.txt 0 次或 0 次以…

4.0.4 ( ) 反向引用/后向引用—-sed    先怜惜在利用

sed  -r   识别扩充正则

使输出结果为 12<34>56
        那一个就叫后向引用

[澳门金沙国际 ,root@oldboy oldboy]#
echo 123456 |sed -r ‘s#(12)(34)(56)#\1<\2>\3#g’

12<34>56
                         \2对应后面第多少个

12.27

4.0.5 {}   0{n,m} 前二个字符至少接二连三出现了n次,最多接二连三出现了m次

0{n,m}  前一个字符至少三番五次出现n次,最多三番五次现身了m次

0{n}   前1个字符三番五次出现n次

0{n,}   前多个字符至少接二连三出现n次

0{,m}  前二个字符最多连续出现了m次

例:查找文本中0最少出现贰次最多产出5遍的行

[root@oldboy oldboy]#
egrep ‘0{3,4}’ oldboy.txt  

my qq is 49000448

not 4900000448.

例:查找文本中0出现三回的行

[root@oldboy oldboy]#
egrep ‘0{3}’ oldboy.txt  

my qq is 49000448

not 4900000448.

 

 

找出0一连出现了1次的行(正好2遍)

[root@oldboy
oldboy]# egrep ‘^.*[^0]0{3}[^0].*$’ oldboy.txt 

my qq
is 49000448

 

不当:加号在花括号前方,花括号失效

澳门金沙国际 4 

 

4.0.6 ?前1个字符出现零次或叁次

[root@oldboy oldboy]#
cat good.txt

good

gd

god

goood

[root@oldboy oldboy]#
egrep ‘go?d’ good.txt

gd

god

 

4.1 ERE小结

1. +一般与[]拓展同盟 把各类连续的事物取出来

2. |   或

3. ()  三个总体   后向引用—sed

4. {}   0{n,m} 前2个字符至少一而再出现了n次,最多接二连三出现了m次

5. ?  前贰个字符现身了零次或1回

 

4.2 基本功正则与恢弘正则的界别

基本功正则:   grep/sed/awk

恢宏正则:  egrep/sed -r/awk

 

4.3 grep/sed 可以加\转义符号识别扩张正则

[root@oldboy oldboy]#
grep ‘go\+d’ good.txt

good

god                    \只能转义对单个字符
  鸡肋

goood

补充:了解

澳门金沙国际 5 

4.4 正则总结

1. grep/egrep      -o和颜色是grep独有

2. 一步步分解

4.5 正则学习材料

man  grep

info  sed/awk/grep

 

 

 

 

 

 

 

 

 

 

 

 

相关文章