Day 15
作者:翟玉龙
归档:课堂笔记
2019/3/20
快捷键:
Ctrl + 1 标题1
Ctrl + 2 标题2
Ctrl + 3 标题3
Ctrl + 4 实例
Ctrl + 5 程序代码
Ctrl + 6 正文
格式说明:
蓝色字体:注释
黄色背景:重要
绿色背景:注意
老男孩教育教学核心思想6重:重目标、重思路、重方法、重实践、重习惯、重总结
联系方式:
网站运维QQ交流群:
Linux 385168604架构师390642196
Python 29215534大数据421358633
官方网站:
目录
学无止境,老男孩教育成就你人生的起点!............................................................ 1
[if !supportLists]第1章 [endif]Sed实践
Sed -I 在第二行前插入文本 sed '2i i teach linux'oldb
Sed -a 在第二行后插入文本 sed‘2a I teach linux’oldb
添加多行是sed ‘2a I teach linux\n第二行内容\n第三行内容’oldb
删除指定行:
Sed -I ‘3d’ oldb
Sed -I ‘5,8d’oldb 删除第三行和删除五到八行
删除指定行
sed-i '5,8d' oldgirl.txt
环境:
[root@oldboyedu ~/test]# cat oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball andchinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
问题1:输出oldboy.txt的第2-3行内容※。
[root@oldboyedu ~/test]# sed -n '2,3p'oldgirl.txt
I like badminton ball ,billiard ball andchinese chess!
our site is http://www.oldboyedu.com
[root@oldboyedu ~/test]# head -3oldgirl.txt |tail -2
I like badminton ball ,billiard ball andchinese chess!
our site is http://www.oldboyedu.com
问题2:过滤出含有oldboy字符串的行※。
[root@oldboyedu ~/test]# sed -n '/oldboy/p'oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
[root@oldboyedu ~/test]#grep oldboy oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
问题3:删除含有oldboy字符串的行※。
[root@oldboyedu ~/test]# sed '/oldboy/d'oldgirl.txt
I like badminton ball ,billiard ball andchinese chess!
my qq num is 49000448.
[root@oldboyedu ~/test]#grep -v "oldboy" oldgirl.txt
I like badminton ball ,billiard ball andchinese chess!
my qq num is 49000448.
问题4:将文件中的oldboy字符串全部替换为oldgirl※。
[root@oldboyedu ~/test]# sed's#oldboy#oldgirl#g' oldgirl.txt
I am oldgirl teacher!
I like badminton ball ,billiard ball andchinese chess!
our site is http://www.oldgirledu.com
my qq num is 49000448.
vim替换:
问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。
[root@oldboyedu ~/test]# sed -e's#oldboy#oldgirl#2' -e 's#49000448#31333741#g' oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball andchinese chess!
our site is http://www.oldboyedu.com
my qq num is 31333741.
问题6:在oldboy.txt文件的第2行后追加文本。
[root@oldboyedu~/test]# sed '2a I teacher linux.' oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball andchinese chess!
I teacher linux.
our site is http://www.oldboyedu.com
my qq num is 49000448.
[root@oldboyedu ~/test]# cat oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball andchinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
[root@oldboyedu ~/test]# sed -i '2a Iteacher linux.' oldgirl.txt
[root@oldboyedu ~/test]# cat oldgirl.txt
I am oldboy teacher!
I like badminton ball ,billiard ball andchinese chess!
I teacher linux.
our site is http://www.oldboyedu.com
my qq num is 49000448.
[root@oldboyedu ~/test]# sed '2i I teacherlinux.i' oldgirl.txt
I am oldboy teacher!
I teacher linux.i
I like badminton ball ,billiard ball andchinese chess!
I teacher linux.
our site is http://www.oldboyedu.com
my qq num is 49000448.
问题1:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。
练习sed
正则是贪婪匹配模式,人性是贪婪的。
方法1:
[root@oldboyedu~/test]# ifconfig eth0|sed -n 2p|sed 's#^.*inet ##g'|sed 's# netm.*$##g'
10.0.0.201
方法:要取一个目标,删除目标两边的,就得到了目标:
先匹配上,然后在删除
[root@oldboyedu ~]# ifconfig eth0|sed -n2p|sed 's#^.*inet ##g'|sed 's# netm.*$##g'
10.0.0.201
[root@oldboyedu ~]# ifconfig eth0|sed -n2p|sed -e 's#^.*inet ##g' -e 's# netm.*$##g'
10.0.0.201
[root@oldboyedu ~]#ifconfig eth0|sed -ne 's#^.*inet ##g' -e 's# netm.*$##gp'
10.0.0.201
[root@oldboyedu ~]#ifconfig eth0|sed -nr '2s#^.*inet (.*) netm.*$#\1#gp'
10.0.0.201
验证是否懂了的练习题:
stat /etc/hosts自行取其中的644
[root@oldboyedu ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 16829878 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-06 20:40:18.463001804 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2019-03-04 11:15:49.426692303 +0800
Birth: -
[root@oldboyedu ~]# stat /etc/hosts|sed -rn's#^.*\(0(.*)/-.*$#\1#gp'
644
考试:ip add的输出取出IP。
[root@oldboyedu ~]# ip add|sed -rn's#^.*net (.*)/24.*$#\1#gp'
10.0.0.201
1、象棋,教学,比赛,活动
2、踢毽子,比赛。最牛的单人前三,小组前三。
grep过滤查找内容。筛子
sed 取行,替换,删除,追加
awk 取列
cut 按列切割
-d 指定分隔符 -f指定哪列,多列用逗号
[root@oldboyedu ~]# cat a.txt
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu ~]# cut -d" "-f1,3,5 a.txt
1 3 5
[root@oldboyedu ~]# cut -d" "-f3-5 a.txt
3 4 5
练习
[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@oldboyedu ~]# cut -d":"-f3,4 /etc/passwd
0:0
1:1
2:2
[root@oldboyedu ~]# cat b.txt
oldboy 49000448
[root@oldboyedu ~]# cut -c1-6,8- b.txt
oldboy4900044
awk语法:
awk [option] 'pattern{action}' file...
awk [参数] '条件{动作}' 文件...
参数:
-F 指定分隔符
打印第一列:
[root@oldboyedu ~]# awk -F ":"'{print $1}' oldboyedu.txt
root
bin
daemon
adm
lp
[root@oldboyedu ~]# awk -F ":"'{print $3,$5}' oldboyedu.txt
0 root
1 bin
2 daemon
3 adm
4 lp
列:$1第一列 $2第二列以此类推....
$0 整行
$NF 最后一列倒数第一列
$(NF-1) 倒数第二列
[root@oldboyedu ~]# awk -F ":"'{print $NF}' oldboyedu.txt
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
[root@oldboyedu ~]# awk -F ":"'{print $0}' 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
练习:打印 1 2 和最后一列。
[root@oldboyedu ~]# awk -F ":"'{print $1,$2,$NF}' oldboyedu.txt
root x /bin/bash
bin x /sbin/nologin
daemon x /sbin/nologin
adm x /sbin/nologin
lp x /sbin/nologin
问题1:取test.txt文件的第2行到第3行的内容。
[root@oldboyedu ~]# awk'NR>1&&NR<4' oldboyedu.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@oldboyedu ~]# awk 'NR==2,NR==3'oldboyedu.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
问题2:过滤出含有root字符串的行※。
[root@oldboyedu ~]# awk '/root/'oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# awk /root/oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]#
[root@oldboyedu ~]# awk "/root/"oldboyedu.txt
root:x:0:0:root:/root:/bin/bash
问题3:删除含有root字符串的行※。
[root@oldboyedu ~]# awk '/^[^r]/'oldboyedu.txt
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
[^r] 非r
^[^r] 以非r字符卡头
问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。
[root@oldboyedu ~]# awk -F ":"'{print NR,$1,$3,$NF}' oldboyedu.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@oldboyedu ~]# ifconfig eth0|awk'NR==2{print $2}'
10.0.0.201
C6
[root@oldboy ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr00:0C:29:D0:87:20
inet addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed0:8720/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:243 errors:0 dropped:0 overruns:0 frame:0
TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20674 (20.1 KiB) TXbytes:8706 (8.5 KiB)
[root@oldboy ~]# ifconfig eth0|awk'NR==2{print $2}'
addr:10.0.0.202
[root@oldboy ~]# ifconfig eth0|awk'NR==2{print $2}'|awk -F ":" '{print $2}'
10.0.0.202
[root@oldboy ~]# ifconfig eth0|awk -F"[: ]+" 'NR==2{print $4}'
10.0.0.202
问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出
awk -F ":" '$1~/root/ {print$NF}' test.txt
~匹配
问题1:取test.txt文件的第2行到第3行的内容。
问题2:过滤出含有root字符串的行※。
问题3:删除含有root字符串的行※。
问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。
问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。
问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出
问题7:过滤下列test1.txt文件中第三列内容分数大于70,并且小于95的人名和性别。
y