Day 18 正则表达式与取出ip地址

Day 18 正则表达式与取出ip地址

1.1 通配符VS正则 (区分)

  通配符:找出文件名 大部分命令可以使用

  正则:精确地过滤 三剑客使用

1.2 正则表达式(Regular  Express  RE

1.2.1 基础正则(BRE  Basic  Regular  Expression

^          ….开头

$     ….结尾

^$    空行 什么符号都没有

.     任意一个字符

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

.*    所有 任何字符 包含空行

[ ]    [abc] abc (范围是一个字母)

[^]   [^] [^abc]排除abc

扫描二维码关注公众号,回复: 2504880 查看本文章

1.2.2 扩展正则(ERE Extented  Regular  Expression

+    前一个字符出现1次或1次以上(一般与[ ]进行配合 把各种连续的东西取出来)

|     或者

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

{ }    0{n,m} 前一个字符至少连续出现了n次,最多连续出现m

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

正则表达式 -2- [oldboy]

[root@oldboyedu50-lnb /oldboy]# grep '[oldboy]'   oldboy.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 size is http://blog.oldboyedu.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

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

o

l

d

b

o

y

l

l

b

1.2.3 找出oldboy.txt中以mn开头的行

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

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

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

1.2.4 找出oldboy.txt中以mn开头并且以mn结尾的行

[root@CJY /oldboy]#grep '^[mn]' oldboy.txt |grep '[mn]$'

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

grep '^[mn].*[mn] $' oldboy.txt

 

1.3 第九个符号 [^] [^abc]排除abc

1.3.1 排除abc

[root@CJY /oldboy]#grep '[^abc] ' oldboy.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 size is http://blog.oldboyedu.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

1.3.2 排除文件中的数字或大小写字母

[root@CJY /oldboy]#grep  '[^0-9a-Z]' oldboy.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 size is http://blog.oldboyedu.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

2.1扩展正则(ERE Extented  Regular  Expression

2.2第十个符号 + 前一个字符出现1次或1次以上(一般与[ ]进行配合 把各种连续的东西取出来)

[root@CJY /oldboy]#grep -E '0+' oldboy.txt

my qq is 49000448

not 4900000448.

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

my qq is 49000448

not 4900000448.

[root@CJY /oldboy]#grep '0\+' oldboy.txt

my qq is 49000448

not 4900000448.

2.2.1取出连续出现的小写字母

[root@CJY /oldboy]#grep -E '[a-z]+' oldboy.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 size is http://blog.oldboyedu.com

my qq is 49000448

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

2.311个符号 | 或者

[root@CJY /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

2.3.1先备份 /etc/ssh/sshd_config然后排除文件中的#的行和空格行

[root@CJY /oldboy]#cp /etc/ssh/sshd_config {,.bak.20180801}

[root@CJY /oldboy]#ll /etc/ssh/sshd_config*

[root@CJY /oldboy]#egrep -v '^#|^$' sshd_config

Protocol 2

SyslogFacility AUTHPRIV

PasswordAuthentication yes

ChallengeResponseAuthentication no

2.4正则表达式 3   [^#^$](排除#^$  [^$]  [^#$]     

[ ]中的$  . 没有特殊含义

1.png

2.5正则表达式 4   [^abc](排除abc)  vs  grep –v(取反)

[^a-z] 排除按某个字符  

grep –v  排除按行

2.png

2.612个符号 ( ) 表示一个整体 反向引用/后向引用-sed

[root@CJY /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!

2.6.1反向引用/后向引用

思路:把你想要的保护起来

sed ’s###g’后面两个引号之间使用  \数字 引用

echo 123456    显示12<34>56

[root@CJY /oldboy]#echo 123456|sed -r 's#(34)#<\1>#g'

12<34>56

               

2.713个符号  { }  0{n,m} 前一个字符至少连续出现了n次,最多连续出现m

        a{n,m}前一个数字连续出现至少n次最多m

        a{n}前一个数字连续出现n

        a{n,}前一个数字连续出现至少n

        a{,m}前一个数字连续出现最多m

某一行的某一部分

1.      定位 取出某一行

2.      sed/awk 取出想要的内容

×××例题

任 3oldboy

任 lidao97303136098

任 alex2197303136098

任 350182197303oldgir

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

向 14052219961008852X

金 211324198705244720

万 500224197105168312

任 1231231231oldboy

 

提取×××号码

[root@oldboyedu50 oldboy]# egrep '[0-9X]{18}' id.txt
金 211324198705244720
万 500224197105168312
吕 211282199209113038
孔 150000198309176071
邹 371001197412221284
贺 130185200011215926
杜 362522198711278101
向 14052219961008852X

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

2.8.1取出网卡的ip地址

[root@CJY /oldboy]#ip a s eth0(ip address show eth0)

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:76:99:0d brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.203/24 brd 10.0.0.255 scope global eth0

    inet6 fe80::20c:29ff:fe76:990d/64 scope link

       valid_lft forever preferred_lft forever

 

[root@CJY /oldboy]#ip a s eth0|awk 'NR==3'|sed 's#^.*net##g'|sed 's#/2.*##g'

 10.0.0.203                                     方法一

 

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

10.0.0.203                                      方法二

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

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

10.0.0.203 255.255.255.0                          方法一

[root@CJY /oldboy]#ifconfig  eth0 |awk 'NR==2' |awk -F"addr:|Mask:|Bcast:" '{print $2,$NF}'         方法二

255.255.255.0                        

2.8.3小结:

1.      取出ip地址

2.      Awk方法 –F(指定分隔符)

3.1总结:

1.      正则 BRE ERE

2.      排除文件空行或以#开头的行 grep sed awk

3.      取出网卡的ip地址

ip a

ifconfig eth0


猜你喜欢

转载自blog.51cto.com/13859649/2153203