基础正则表达式和扩展正则表达式
基础正则表达式: ^ 第1个符号,以什么什么开头 ^m $ 第2个符号,以什么什么结尾 m$ ,还表示空行,或空格,可以用cat -An 试一下 ^$ 第3个符号,空行 什么符号都没有 . 第4个符号,表示任意 “一个字符” 第5个符号, 转义字符不解析特殊符号的含义 , n 相当于回车键 , t 相当于tab键 * 第6个符号,表示前一个字符连续出现了0次或0次以上 .* 第7个符号,表示任意字符,包括空行,正则表达式表示所有或连续出现的。 [ ] 第8个符号,中括号,中括号内每次查找一个字符。 [^] 第9个符号,[^acb],表示排除 a,b,c 扩展正则表达式: + 第10个符号,表示前一个字母连续出现1次或1次以上 扩展正则表达式: + 第10个符号,表示前一个字母连续出现1次或1次以上 | 第11个符号,(竖线)表示 " 或者 " 的意思 () 第12个符号,(小括号)表示一个整体 反向引用 / 后向引用 例如:sed -r 's#(..)(..)(..)#1<(2)>3#g' ##后向引用 {} 第13个符号,{n,m} 前一个字符至少连续出现N次,最多连续出现m次 a{1,10} ##表示 a最少连续出现1次,最多连续出现10次 grep 参数: -E 等于 egerp -n 显示行号 -i 不区分大小写 -o 只输出匹配的内容 sed 参数: -n 指定行号 -r 支持扩展正则表达式 's#123#456#g' 表示把123 替换成456 awk 参数: -F 指定分隔符 NR 表示行号 $ 表示取某一列 练习题1:用sed或awk取出服务器eth0的IP地址。
1、用sed取出服务器eth0的ip地址 [root@MB-10-0-0-200 ~]# ifconfig eth0 ###查看服务器的IP eth0 Link encap:Ethernet HWaddr 00:0C:29:FB:AD:B8 inet addr:192.168.11.138 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6661195 errors:0 dropped:0 overruns:0 frame:0 TX packets:6770 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:8342856346 (7.7 GiB) TX bytes:1103955 (1.0 MiB)
[root@MB-10-0-0-200 ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*).*Bcast.*$#1#gp' ### 1 表示前一个()内的内容,就是我们要取出的内容 192.168.11.138
###############备注######################
|sed -nr '2s#^.*addr:(.*).*Bcast.*$#1#gp' 等于 |sed -n 2p|sed -r 's#^.*addr:(.*).*Bcast.*$#1#g'
#########################################
2、用awk取出服务器eth0的ip地址 [root@MB-10-0-0-200 ~]# ifconfig eth0 ###查看服务器的IP eth0 Link encap:Ethernet HWaddr 00:0C:29:FB:AD:B8 inet addr:192.168.11.138 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6665321 errors:0 dropped:0 overruns:0 frame:0 TX packets:6772 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:8347065816 (7.7 GiB) TX bytes:1104075 (1.0 MiB)
[root@MB-10-0-0-200 ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2{print $4}' ###注意:'[ :]' 中括号内一个字符是空格!!! 192.168.11.138 ###############备注######################
|awk -F '[ :]+' 'NR==2{print $4}' 等于 |awk NR==2|awk -F '[ :]+' '{print $4}'
######################################### 练习题2:用awk或sed 取出 /etc/hosts 文件的权限(以数字的形式显示) 1、用awk取 /etc/hosts 文件的权限 [root@MB-10-0-0-200 ~]# stat /etc/hosts ####首先查看hosts文件的权限,权限为:0644 File: `/etc/hosts' Size: 476 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 786460 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-04-05 17:00:16.938264330 +0800 Modify: 2018-04-05 16:59:22.926263885 +0800 Change: 2018-04-05 16:59:22.926263885 +0800
[root@MB-10-0-0-200 ~]# stat /etc/hosts|awk -F '[(/]' 'NR==4{print $2}' ###以(和/ 为分隔符,将第四行的第二列取出 0644 ###############备注######################
|awk -F '[(/]' 'NR==4{print $2}' 等于 |awk NR==4|awk -F '[(/]' '{print $2}'
#########################################
2、用sed取 /etc/hosts 文件的权限 [root@MB-10-0-0-200 ~]# stat /etc/hosts ####首先查看hosts文件的权限,权限为:0644 File: `/etc/hosts' Size: 476 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 786460 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-04-05 17:00:16.938264330 +0800 Modify: 2018-04-05 16:59:22.926263885 +0800 Change: 2018-04-05 16:59:22.926263885 +0800
[root@MB-10-0-0-200 ~]# stat /etc/hosts|sed -nr '4s#^.*(('[0-9]+')/-.*$#1#gp' ### 1 表示前一个()内的内容,就是我们要取出的内容 0644 ### ( 表示取消 ( 的特殊含义 ###############备注######################
|sed -nr '4s#^.*(('[0-9]+')/-.*$#1#gp' 等于 |sed -n 4p|sed -r 's#^.*(('[0-9]+')/-.*$#1#g'
######################################### (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |