
Linux正则表达式
1.三剑客正则表达式
1.正则表达式的分类
基础正则表达式
扩展正则表达式
2.正则与通配符的区别
通配符 查找文件 支持的命令,linux大部分命令都支持,以txt结尾的文件
正则 作用在文件中过滤 支持的命令: 三剑客sed grep awk
3.使用正则表达式注意事项
正则表达式按照行为单位处理
正则神坑-中文符号grep/egrep alias egrep=’egrep --color=auto’
2.基础正则
第一个符号
^以什么什么开头行
第二个符号$以什么什么结尾的行
第三个符号^$空行 什么符号都没有
第四个符号.任意一个字符 不显示空行
第五个符号\转移字符
第六个符号*前一个字符连续出现了0或0次以上
第七个符号.*贪婪性 所有 任何符号 包含空行
第八个符号[][abc]相当于是一个符号(每次匹配一个字符),找出包含a或b或c
第九个符号[^][^abc]相当于是一个符号(每次匹配1个字符),找出除了a或除了b或除了c
3.扩展正则
第10个符号
+前一个字符出现1次或者1次以上
第11个符号|或者
第12个符号()表示一个整体 反向引用/后向引用 --先保护后使用
第13个符号{} 0{m,n}前一个符号至少出现m次,最多出现n次
第14个符号?前一个符号出现0次或者1次 --前一个符号有或者没有
ERE1.+ 一般与[]进行配合,把各种连续的东西取出来 2.| 或 3.() 一个整体 后项引用sed 4.{} 0{m,n} 前一个符号至少出现m次,最多出现n次 5.? 前一个符号出现0次或者1次 --前一个符号有或者没有
4.正则总结
正则认为
[ ]中括号里面是一样的
后向引用,先保护后使用.
花括号
正则表达式
1.正则符号^ $ ^$ . 任意一个字符 .* 所有 * 前一个字符连续出现了0次或0次以上 >=0 [] [abc] 中括号相当于是一个字符 [a-z] [A-Z] [0-9] grep '[a-Z]'2.
/etc/ssh/sshd_config排除 文件中的#和空行egrep -v '^$|^#' /etc/ssh/sshd_config grep '^[a-Z]' /etc/ssh/sshd_config3.
dumpe2fs /dev/sda3过滤出 包含inode size和inode count的行[root@cloud /oldboy]# dumpe2fs /dev/sda3 |egrep 'inode (size|count)' -i dumpe2fs 1.41.12 (17-May-2010) Inode count: 1234576 Inode size: 2564.反向引用/后向引用
先保护起来,然后在使用[root@cloud /oldboy]# echo '123456' |sed -r 's#(.*)#\1#g' 123456 [root@cloud /oldboy]# echo '123456' |sed -r 's#(.*)#<\1#g' <123456 [root@cloud /oldboy]# echo '123456' |sed -r 's#(.*)#<\1>#g' <123456> echo '123456' 12<34>56 [root@cloud /oldboy]# echo '123456' |sed -r 's#(..)(..)(..)#\1<\2>\3#g' 12<34>56 [root@cloud /oldboy]# echo '123456' |sed -r 's#(..)(..)(..)#\3<\2>\1#g' 56<34>125.花括号
0{n,m}前一个字符至少连续出现n次,最多连续出现了m次* >=0 + >=1 egrep '[0-9]{17}[0-9X]' id.txt egrep '[0-9]{18}|[0-9]{17}[X]' id.txt egrep -v '^(#.*)?$' /etc/ssh/sshd_config ^$ 空行 (#.*)? ^(#.*)?$ 1.当?表示0次的时候 相当于是 ^$ 2.当?表示1次的时候 相当于是 ^(#.*)$创建测试文件:
echo -e 'oldboy\n\noldboy alex\n \nlidao \n\n\nend'>lidao.txt
排除文件中的空行和连续空格的行egrep -v '^$|^ +$' lidao.txt ^[a-Z] ^[ ]*$ 0 ^$ >=1 ^[ ]+$5.取出网卡的ip地址
方法1 - sed
[root@cloud ~]# ip a s eth0 |sed -n 3p inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0 [root@cloud ~]# ip a s eth0 |sed -n 3p |sed 's#^.*t ##g' 10.0.0.200/24 brd 10.0.0.255 scope global eth0 [root@cloud ~]# ip a s eth0 |sed -n 3p |sed 's#^.*t ##g'|sed 's#/.*$##g' 10.0.0.200方法2 - sed
[root@cloud ~]# ip a s eth0 |sed -n 3p |sed -r 's#^.*t |/.*$##g' 10.0.0.200方法3 - sed 后向引用
[root@cloud ~]# ip a s eth0 |sed -n 3p inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0 [root@cloud ~]# ip a s eth0 |sed -n 3p |sed -r 's#(^.*t )(.*)(/.*$)#\2#g' 10.0.0.200 [root@cloud ~]# ip a s eth0 |sed -n 3p |sed -r 's#^.*t (.*)/.*$#\1#g' 10.0.0.200方法4 - awk
[root@cloud ~]# ip a s eth0|awk 'NR==3' |awk -F"[ /]+" '{print $3}' 10.0.0.200 [root@cloud ~]# ip a s eth0|awk 'NR==3' |grep '[ /]' inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0 [root@cloud ~]# ip a s eth0|awk 'NR==3' |egrep '[ /]+' inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0 [root@cloud ~]# ip a s eth0|awk 'NR==3' |egrep '[ /]+' -o6.取出ifconfig eth0 的ip地址和子网掩码
[root@cloud ~]# ifconfig eth0|awk 'NR==2'|awk -F"[ :]+" '{print $4,$NF}' 10.0.0.200 255.255.255.0方法 5
awk '条件{动作}' NR==3 NR>3 $3>1 print 打印[root@cloud ~]# ip a s eth0 |awk 'NR==3{print $2}' 10.0.0.200/24 [root@cloud ~]# ip a s eth0 |awk -F"[ /]+" 'NR==3{print $3}' 10.0.0.200 [root@cloud ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:06:12:31 inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe06:1231/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:17020 errors:0 dropped:0 overruns:0 frame:0 TX packets:19800 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5216059 (4.9 MiB) TX bytes:16701928 (15.9 MiB) [root@cloud ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}' 10.0.0.200 [root@cloud ~]# ifconfig eth0|awk -F "addr:| Bcast" 'NR==2{print $2}' 10.0.0.2007.取出网卡ip地址
1.sed反向引用 先保护在使用
2.awk指定分隔符[root@cloud ~]# ip a s eth0 |sed -n '3s#inet#oldboy#gp' oldboy 10.0.0.200/24 brd 10.0.0.255 scope global eth0 [root@cloud ~]# ip a s eth0 |sed -nr '3s#^.*t (.*)/.*$#\1#gp' 10.0.0.200 [root@cloud ~]# ifconfig eth0|sed -n 2p |sed -r 's#(^.*dr:)(.*)( Bc.*:)(.*$)#\2 \4#g' 10.0.0.200 255.255.255.0 [root@cloud ~]# ifconfig eth0|sed -n 2p |sed -r 's#^.*dr:(.*) Bc.*:(.*$)#\1 \2#g' 10.0.0.200 255.255.255.0 [root@cloud ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*:(.*$)#\1 \2#gp' 10.0.0.200 255.255.255.0