美文网首页
2019-03-20 第十一章 linux正则表达式与三剑客之

2019-03-20 第十一章 linux正则表达式与三剑客之

作者: Ffvc | 来源:发表于2019-03-20 22:24 被阅读0次

    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****语法

    image.png

    参数:

    -F 指定分隔符

    打印第一列

    列:1第一列2第二列

    $0整行

    NF 最后一列,(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 1,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,1,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":" '1~/root/{printNF}' b.txt

    /bin/bash

    问题7:过滤下列c.txt文件中第三列内容分数大于70,并且小于95的人名和性别。

    [root@oldboy/test]# awk '3>70&&3<95{print 1,2}' c.txt

    张三 男

    王五 男

    相关文章

      网友评论

          本文标题:2019-03-20 第十一章 linux正则表达式与三剑客之

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