美文网首页
第十五天课堂笔记2019-03-20

第十五天课堂笔记2019-03-20

作者: 学无止境_9b65 | 来源:发表于2019-03-20 15:17 被阅读0次

    特殊预定义中括号表达式
    [root@oldboyedu ~/test]# egrep "[0-9]" oldboy.txt
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~/test]#
    [root@oldboyedu ~/test]# egrep "[[:digit:]]" oldboy.txt
    my qq num is 49000448.
    not 4900000448.
    [root@oldboyedu ~/test]# egrep "[[:lower:]]" oldboy.txt
    I am oldboy teacher!
    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 ,i am not oldbey,but OLDBOY!
    [root@oldboyedu ~/test]# egrep "[[:upper:]]" oldboy.txt
    I am oldboy teacher!
    I teach linux.
    I like badminton ball ,billiard ball and chinese chess!
    my god ,i am not oldbey,but OLDBOY!

    [root@oldboyedu ~/test]# egrep "\boldboy\b" oldboy.txt
    I am oldboy teacher!
    [root@oldboyedu ~/test]# egrep "oldboy" oldboy.txt
    I am oldboy teacher!
    our site is http://www.oldboyedu.com
    [root@oldboyedu ~/test]# egrep -w "oldboy" oldboy.txt
    I am oldboy teacher!

    评书:三侠剑 老好了。
    侠客、剑客

    Linux三剑客
    awk sed grep

    sed
    Sed是操作、过滤和转换文本内容的强大工具。
    常用功能有对文件实现快速增删改查(增加、删除、修改、查询),
    其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。

    sed [选项] [sed内置命令字符] [文件]

    选项:
    -n 取消默认sed的输出,常与sed内置命令的p连用※
    -i 直接修改文件内容,而不是输出到终端。

    如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※

    sed的内置命令字符说明
    s 替换
    g 全局global
    p 打印print
    d 删除delete

    I am oldboy teacher!
    I like badminton ball ,billiard ball and chinese chess!
    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 and chinese chess!
    our site is http://www.oldboyedu.com
    my qq num is 49000448.

    问题1:输出oldboy.txt的第2-3行内容※。
    sed -n '2,3p' oldgirl.txt

    问题2:过滤出含有oldboy字符串的行※。
    sed -n '/oldboy/p' oldgirl.txt

    问题3:删除含有oldboy字符串的行※。
    sed '/oldboy/d' oldgirl.txt
    sed /oldboy/d oldgirl.txt

    问题4:将文件中的oldboy字符串全部替换为oldgirl※。
    vim替换:
    :%s#oldboy#oldgirl#g
    sed 's#想替换啥#用啥替换#g' oldgirl.txt

    sed 's#oldboy#oldgirl#g' oldgirl.txt
    修改文件:
    sed -i 's#oldboy#oldgirl#g' oldgirl.txt

    问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。
    sed -e 's#oldboy#oldgirl#g' -e 's#49000448#31333741#g' oldgirl.txt I

    环境:
    [root@oldboyedu ~/test]# cat oldgirl.txt
    I am oldboy teacher!
    I like badminton ball ,billiard ball and chinese chess!
    our site is http://www.oldboyedu.com
    my qq num is 49000448.
    问题1:输出oldboy.txt的第2-3行内容※。
    问题2:过滤出含有oldboy字符串的行※。
    问题3:删除含有oldboy字符串的行※。
    问题4:将文件中的oldboy字符串全部替换为oldgirl※。
    问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。
    问题6:在oldboy.txt文件的第2行后追加文本。
    问题7:在oldboy.txt文件的第2行插入文本。

    删除指定行
    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 and chinese 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 and chinese chess!
    our site is http://www.oldboyedu.com
    [root@oldboyedu ~/test]# head -3 oldgirl.txt |tail -2
    I like badminton ball ,billiard ball and chinese 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 and chinese chess!
    my qq num is 49000448.
    [root@oldboyedu ~/test]# grep -v "oldboy" oldgirl.txt
    I like badminton ball ,billiard ball and chinese 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 and chinese 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 and chinese 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 and chinese 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 and chinese chess!
    our site is http://www.oldboyedu.com
    my qq num is 49000448.
    [root@oldboyedu ~/test]# sed -i '2a I teacher linux.' oldgirl.txt
    [root@oldboyedu ~/test]# cat oldgirl.txt
    I am oldboy teacher!
    I like badminton ball ,billiard ball and chinese chess!
    I teacher linux.
    our site is http://www.oldboyedu.com
    my qq num is 49000448.
    [root@oldboyedu ~/test]# sed '2i I teacher linux.i' oldgirl.txt
    I am oldboy teacher!
    I teacher linux.i
    I like badminton ball ,billiard ball and chinese 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 -n 2p|sed 's#^.inet ##g'|sed 's# netm.##g' 10.0.0.201 [root@oldboyedu ~]# ifconfig eth0|sed -n 2p|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 ":" '{printNF}' 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 HWaddr 00: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) TX bytes: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{print2}'|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/ {printNF}' test.txt
    ~匹配

    011.png 022.png

    相关文章

      网友评论

          本文标题:第十五天课堂笔记2019-03-20

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