首页 > 代码库 > linux正则表达式的使用

linux正则表达式的使用

正则表达式的使用

1.1 创建环境

cat >q.txt<<EOF

oldboy  oldboy

hellooldboy hellooldboy

awkoldboy  awkoldboy

sedoldboy sedoldboy

oldboyedu oldboyedu

EOF

取出只有oldboy的行

grep "\boldboy\b" q.txt

 

实例1-1反向引用

 [root@oldboyedu-39-nb~]# #####第一个里程碑-反向引用(先保护起来,然后使用)

 [root@oldboyedu-39-nb~]# echo 123456|sed -r ‘s#..(..)..#\1#g‘

34

[root@oldboyedu-39 /]# echo 123456|sed -r‘s#(.).(..).(.)#\1\2\3#g‘

1346

 

                           

1.       *0次或多次    +  1次或多次    ?   0次或1次       {}   自定义几次或几次到几次

1.2 正则表达式总结

  egrep/grep了解,简单看看效果,结果。

  egrep/grep -o参数看正则到底匹配了什么。

  配合grep,egrep,sed -r,awk更为强大。

1.3 正则表达式的参考资料

man grep

 infogrep

man 7 glob

linux正则表达式语法

http://aresxin.blog.51.cto.com/4734097/1602624

正则表达式30分钟入门教程

http://deerchao.net/tutorizls/regex/regex.htm.htm#mission

1.4 sed在正则表达式中的使用

实例1-2 在/etc/hosts中取出644或0644

 

进入环境:[root@oldboyedu-39-nb ~]# stat/etc/hosts

 

####方法一

[root@oldboyedu-39-nb ~]# stat /etc/hosts

[root@oldboyedu-39-nb ~]# stat /etc/hosts|awk‘NR==4‘|sed ‘s#^.*(0##g‘|sed ‘s#/.*$##g‘

644

 

方法二:

[root@oldboyedu-39-nb ~]# stat /etc/hosts|awk‘NR==4‘|sed -r ‘s#^.*\(0(.*)/-.*$#\1#g‘

644

 

###方法三 awk

[root@oldboyedu-39-nb ~]# stat /etc/hosts

 [root@oldboyedu-39-nb~]# stat /etc/hosts |awk ‘NR==4‘|awk -F "[0/]" ‘{print $2}‘

644

1.5 sed反向引用取出/etc/hosts文件权限图解

 

实例1-3 

##找出oldboy.txt 中 以m或n开头并且以.或m结尾的行

 

 [root@oldboyedu-39-nb~]# cat oldboy.txt

 [root@oldboyedu-39-nb~]# ###第一个里程碑-m或n开头的

[root@oldboyedu-39-nb ~]# grep"^[mn]"   oldboy.txt

 [root@oldboyedu-39-nb~]# ###第二个里程碑-找出以.或m结尾的

[root@oldboyedu-39-nb ~]# grep "[.m]$"oldboy.txt

 [root@oldboyedu-39-nb~]# ####[]中 正则表达式里面的符号 特殊符号  没有特殊含义。

 [root@oldboyedu-39-nb~]# grep ".$" oldboy.txt

 [root@oldboyedu-39-nb~]# ####第三个里程碑-并且

[root@oldboyedu-39-nb ~]# grep"^[mn].*[.m]$" oldboy.txt


1.6 取出网卡的ip地址和10.0.0.255

实例1-4 

[root@oldboyedu-39-nb ~]# #取出网卡的ip地址和10.0.0.255

[root@oldboyedu-39-nb ~]# ifconfig eth0

[root@oldboyedu-39-nb ~]# ifconfig eth0 |sed -n‘2p‘

[root@oldboyedu-39-nb ~]# ifconfig eth0 |sed -n‘2p‘ |sed -r ‘s#^.*dr:(.*) Bc.*t:(.*)  M.*$#\1#g‘

10.0.0.200

[root@oldboyedu-39-nb ~]# ifconfig eth0 |sed -n‘2p‘ |sed -r ‘s#^.*dr:(.*) Bc.*t:(.*)  M.*$#\2#g‘

10.0.0.255

[root@oldboyedu-39-nb ~]# ifconfig eth0 |sed -n‘2p‘ |sed -r ‘s#^.*dr:(.*) Bc.*t:(.*)  M.*$#\1\2#g‘

10.0.0.20010.0.0.255

[root@oldboyedu-39-nb ~]# ifconfig eth0 |sed -n‘2p‘ |sed -r ‘s#^.*dr:(.*) Bc.*t:(.*)  M.*$#\1 \2#g‘

10.0.0.200


1.7 使用awk取出网卡的ip地址和10.0.0.255

方法三 awk方法

[root@oldboyedu-39-nb ~]# ifconfig eth0|awk‘NR==2‘

[root@oldboyedu-39-nb ~]# ifconfig eth0|awk‘NR==2‘|awk -F "[ :]" ‘{print $13}‘

10.0.0.200

[root@oldboyedu-39-nb~]# ifconfig eth0|awk ‘NR==2‘|awk -F "[ :]+" ‘{print $4}‘

10.0.0.200

 10.0.0.255

[root@oldboyedu-39~]# ifconfig eth0|awk -F"[ :]+" ‘NR==2{print $4,$6}‘

10.0.0.20010.0.0.255

 

方法四

取出ip地址和 255.255.255.0

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk ‘NR==2‘|awk -F "[:]+"  ‘{print $4,$NF}‘

10.0.0.200

255.255.255.0

 

方法五

取ip地址 取权限

[root@oldboyedu-39-nb ~]# ifconfig eth0

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk -F"addr:" ‘NR==2{print $2}‘

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk -F"addr:|Bcast:" ‘NR==2{print $2}‘

10.0.0.200


1.8 +的使用

重新认识下 + 连续出现

实例1-5 

用法一

[root@oldboyedu-39-nb ~]# echo"##########1@@@@@@@@@@2"

##########1@@@@@@@@@@2

[root@oldboyedu-39-nb ~]# echo"##########1@@@@@@@@@@2" |grep "[#@]"

##########1@@@@@@@@@@2

[root@oldboyedu-39-nb ~]# echo "##########1@@@@@@@@@@2"|grep "[#@]" -o

#

 

用法二

[root@oldboyedu-39-nb ~]# echo"##########1@@@@@@@@@@2" |egrep "[#@]+"

##########1@@@@@@@@@@2

[root@oldboyedu-39-nb ~]# echo"##########1@@@@@@@@@@2" |egrep "[#@]+" -o

##########

@@@@@@@@@@

[root@oldboyedu-39-nb ~]#

[root@oldboyedu-39-nb ~]# echo"##@@@@@@###@@@@#####1@@@###@@@@@@@2" |egrep "[#@]+"

##@@@@@@###@@@@#####1@@@###@@@@@@@2

[root@oldboyedu-39-nb ~]# echo"##@@@@@@########1@@@###@@@@@@@2" |egrep "[#@]+"

##@@@@@@########1@@@###@@@@@@@2

[root@oldboyedu-39-nb ~]# echo"##@@@@@@########1@@@###@@@@@@@2" |egrep "[#@]+" -o

##@@@@@@########

@@@###@@@@@@@


1.9 []在正则表达式中的使用

###[] 正则表达式会认为中括号里面的内容都是一样的 abc

###1.在我的筐里面

###2.不在我的筐里面

 

实例1-6 

[root@oldboyedu-39-nb ~]# echo"##########1@@@@@@@@@@2" |awk -F "[#@]+"  ‘{print $2}‘

1

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk‘NR==2‘|sed ‘s#:# #g‘


1.10 cut的使用

方法四-cut

##先把冒号替换为空格取第13列

实例1-7 

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk‘NR==2‘|sed ‘s#:# #g‘

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk‘NR==2‘|sed ‘s#:# #g‘|cut -d " " -f13

10.0.0.200

 

##先通过:分割,然后通过空格分割

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk‘NR==2‘|cut -d ":" -f2

10.0.0.200

Bcast

[root@oldboyedu-39-nb ~]# ifconfig eth0 |awk‘NR==2‘|cut -d ":" -f2|cut -d " " -f1

10.0.0.200


本文出自 “heyong” 博客,请务必保留此出处http://heyong.blog.51cto.com/13121269/1954911

linux正则表达式的使用