Day15
作者:方维超
归档:课堂笔记
时间:2019/3/20
学无止境,老男孩教育成就你人生的起点!
(接昨天问题)问题六——插入行内容:
[root@oldboy/test]# sed '2a wo ai shao di' oldgirl.txt
I am oldboy teacher!
I teach linux.
wo ai shao di
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448
my god,iam not oldboy,butOLDBOY!
[root@oldboy/test]# sed '1a wo ai shao di' oldgirl.txt
I am oldboy teacher!
wo ai shao di
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448
my god,iam not oldboy,butOLDBOY!
image.png练习sed
正则是贪婪匹配模式,人性是贪婪的。
问题1****:取出Linux****中执行ifconfig eth0****后对应的IP****地址(只能输出IP****地址)。
方法1:
[root@oldboy/test]# ifconfig eth0|sed -n 2p|sed -e 's#^.inet##g' -e 's#netm.$##g'
10.0.0.200
[root@oldboy/test]# ifconfig eth0|sed -ne 's#^.inet##g' -e 's#netm.$##gp'
10.0.0.200
[root@oldboy/test]# ifconfig eth0|sed -n 2p|sed 's#^.inet##g'|sed 's#netm.$##g'
10.0.0.200
方法:要取一个目标,删除目标两边的,就得到了目标:
先匹配上,然后在删除
逻辑图:
image.png image.png
验证是否懂了的练习题:
stat /etc/hosts****自行取其中的644
[root@oldboy/test]# stat /etc/hosts|sed -n 4p|sed 's#^.(0##g'|sed 's#/-.$##g'
644
[root@oldboy/test]# stat /etc/hosts|sed -nr 's#^.(0(.)/-.*$#\1#gp'
644
[root@oldboy/test]# stat /etc/hosts|sed -rn 's#^.(0(.)/-.*$#\1#gp'
644
考试:ip add****的输出取出IP****。
[root@oldboy/test]# ip add |sed -n 9p|sed 's#^.inet ##g'|sed 's#/24.$##g'
10.0.0.200
[root@oldboy/test]# ip add |sed -n 9p|sed -e 's#^.inet ##g' -e 's#/24.$##g'
10.0.0.200
[root@oldboy/test]# ip add |sed -rn 's#^.inet(.)/24.*$#\1#gp'
10.0.0.200
image.png三剑客自身特长:
grep 过滤查找内容(相当于筛子)
sed 取行,替换,删除,追加
awk 取列
awk****语法
参数:
-F 指定分隔符
打印第一列
列:2第二列
$0整行
(NF-1)倒数第二列
cut 按列切割
-d 指定分隔符
-f 指定哪列,多列用,连续多列如:f1-5****;f3-5
练习:
[root@oldboy/test]# cut -d"/" -f1,4,3,5 a.txt
1/3/4/5
[root@oldboy/test]# cut -d" " -f1-7 a.txt
1 2 3 4 5 6 7
[root@oldboy/test]# cut -d" " -f1,5,2,6 a.txt
1 2 5 6
练习:
[root@oldboyedu ~]# sed -n '1,5p' /etc/passwd >oldboyedu.txt
[root@oldboyedu ~]# cat oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@oldboy/test]# cut -d":" -f3,4 b.txt
0:0
1:1
2:2
3:4
4:7
问题1:取test.txt文件的第2行到第3行的内容。
[root@oldboy/test]# awk 'NR==2,NR==3' test.txt
PROXY_METHOD=none
BROWSER_ONLY=no
问题2:过滤出含有root字符串的行※。
[root@oldboy/test]# awk '/IP/' test.txt
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPADDR=10.0.0.200
IPV6_PRIVACY=no
[root@oldboy/test]# grep "IP" test.txt
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPADDR=10.0.0.200
IPV6_PRIVACY=no
问题3:删除含有root字符串的行※。
[root@oldboy/test]# awk '/[I]/' test.txt
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
UUID=b5b390e4-85a9-4923-a26b-18445fb1858a
DEVICE=eth0
ONBOOT=yes
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
[root@oldboy/test]# sed '/IP/d' test.txt
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
UUID=b5b390e4-85a9-4923-a26b-18445fb1858a
DEVICE=eth0
ONBOOT=yes
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。
[root@oldboy/test]# cat -n b.txt |awk -F":" '{print 3,$NF}' b.txt
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
[root@oldboy/test]# awk -F":" '{print NR,3,$NF}' b.txt
1 root 0 /bin/bash
2 bin 1 /sbin/nologin
3 daemon 2 /sbin/nologin
4 adm 3 /sbin/nologin
5 lp 4 /sbin/nologin
问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。
[root@oldboy/test]# ifconfig eth0|sed -n 2p|sed 's#^.inet ##g'|sed 's#netm.$##g'
10.0.0.200
问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出
[root@oldboy/test]# awk -F":" 'NF}' b.txt
/bin/bash
问题7:过滤下列c.txt文件中第三列内容分数大于70,并且小于95的人名和性别。
[root@oldboy/test]# awk '3<95{print 2}' c.txt
张三 男
王五 男
网友评论