美文网首页
day 15 sed和awk实践练习

day 15 sed和awk实践练习

作者: Linux_淡忘 | 来源:发表于2019-03-20 18:31 被阅读0次

    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

    官方网站:

    http://www.oldboyedu.com 

    目录

    学无止境,老男孩教育成就你人生的起点!............................................................ 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 '3d'oldgirl.txt

    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

    相关文章

      网友评论

          本文标题:day 15 sed和awk实践练习

          本文链接:https://www.haomeiwen.com/subject/rhitvqtx.html