• 2、shell文本处理工具


    1.grep

    grep 过滤,贪婪模式过滤
    grep -E | egrep 扩展模式

    [root@server1 mnt]# vim westos 
    westosroot
    chroot
    root
    [root@server1 mnt]# grep root westos  过滤,只要是带root的关键字都会过滤出来
    westosroot   含有root的字符串也会过滤出来
    chroot
    root
    [root@server1 mnt]# vim westos 
    westosroot
    chroot
    root
    
    hello
    hello123
    
    [root@server1 mnt]# egrep "root|hello" westos  既要过滤root又要过滤hello要用egrep,拓展命令
    westosroot
    chroot
    root
    hello
    hello123
    [root@server1 mnt]# grep -E "root|hello" westos   或在加-E 和egrep类似
    westosroot
    chroot
    root
    hello
    hello123 
    

    1.1 grep的用法

    grep root passwd过滤root关键字
    grep ^root passwd以root开头
    grep root$ passwd以root结尾
    grep -i root passwd忽略大小写
    grep -E “root字符之前不能有字符
    grep -E “root>” passwdroot字符之后不能有字符
    grep -数字显示过滤行以及上面几行和下面几行
    grep -n显示匹配的行所在行号
    grep -A显示过滤行以及下面几行
    grep -B显示过滤行以及上面几行
    grep -v反向过滤
    [root@server1 mnt]# cp /etc/passwd .
    [root@server1 mnt]# grep root passwd   将含有root的关键字都过滤出来
    root:x:0:0:root:/root:/bin/bash
    test:root:test
    test:chroot:test
    test:test:root
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@server1 mnt]# grep -i root passwd    -i表示忽略大小写
    root:x:0:0:root:/root:/bin/bash
    test:root:test
    test:chroot:test
    test:test:ROOT
    test:test:root
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@server1 mnt]# grep -E "\" passwd    root\> 表示root之后不能有字符
    root:x:0:0:root:/root:/bin/bash
    test:root:test
    test:chroot:test
    test:test:root
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@server1 mnt]# grep -Ev "\" passwd    Ev "\"表示过滤不含root关键字的项,反向过滤
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    [root@server1 mnt]# grep -n hello passwd 
    9:hello  
    [root@server1 mnt]# grep -n hello passwd     显示匹配的行所在行号
    9:hello  
    [root@server1 mnt]# grep -n -3 hello passwd   匹配lhello以及hello上面3行和hello下面三行
    6-sync:x:5:0:sync:/sbin:/bin/sync
    7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8-test:root:test
    9:hello
    10-test:chroot:test
    11-test:test:ROOT
    12-test:test:root
    [root@server1 mnt]# grep -n -B3 hello passwd    B3匹配hello以及上面三行
    6-sync:x:5:0:sync:/sbin:/bin/sync
    7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8-test:root:test
    9:hello
    [root@server1 mnt]# grep -n -A3 hello passwd   A3 匹配hello以及下面三行
    9:hello
    10-test:chroot:test
    11-test:test:ROOT
    12-test:test:root
    

    1.2 grep匹配字符的表示方法

    ^westos以westos开头
    westos$以westos结尾
    w…sw开头s结尾中间四个任意字符
    …ss 结尾前5个任意字符
    *字符出现任意次
    字符出现0到1次
    +字符出现1次以上
    { n }字符出现n次
    { m , n }字符出现m到n次
    { 0 , n }字符出现0到n次
    { , n }字符最多出现n次
    { m , }字符最少出现m次
    (lee){ 2 }lee字符串出现2次
    [root@server1 mnt]# vim westos 
    westos
    test westos 
    test westos test 
    ws
    wes
    wees
    weees
    weeees
    weas
    weaeas
    weaeaeas
    [root@server1 mnt]# grep westos  westos 
    westos
    test westos 
    test westos test 
    [root@server1 mnt]# grep ^westos westos   匹配 以westos开头
    westos
    [root@server1 mnt]# grep westos$ westos    匹配以westos结尾的
    westos
    test westos
    [root@server1 mnt]# grep w.s westos    w开头s结尾中间一个点表示任意一个字符
    westos
    test westos
    test westos test 
    wes
    [root@server1 mnt]# grep w..s westos   w和s之间任意两个字符
    wees
    weas
    [root@server1 mnt]# grep w...s westos   w和s之间任意三个字符
    weees
    [root@server1 mnt]# grep -E "w.*s" westos   .*表示.为无数个
    westos
    test westos
    test westos test 
    ws
    wes
    wees
    weees
    weeees
    weas
    weaeas
    weaeaeas 
    [root@server1 mnt]# grep -E "we*s" westos     e*表示e为无数个
    westos
    test westos
    test westos test 
    ws
    wes
    wees
    weees
    weeees
    [root@server1 mnt]# grep -E "we?s" westos    e? 表示e最多为0-1个
    westos
    test westos
    test westos test 
    ws
    wes 
    [root@server1 mnt]# grep -E "we+s" westos     e+表示e为1到任意多个
    westos
    test westos
    test westos test 
    wes
    wees
    weees
    weeees
    [root@server1 mnt]# grep -E "we{2}s" westos    e{2}表示e出现2次
    wees
    [root@server1 mnt]# grep -E "we{1,2}s" westos    e{1,2}表示出现1到2次
    westos
    test westos
    test westos test 
    wes
    wees
    [root@server1 mnt]# grep -E "we{,2}s" westos     e{,2} 表示e出现0到i2次
    westos
    test westos
    test westos test 
    ws
    wes
    wees
    [root@server1 mnt]# grep -E "we{2,}s" westos    e{2,} 表示e出现2次以上
    wees
    weees
    weeees
    [root@server1 mnt]# grep -E "w(ea)*s" westos    (ea)*  表示ea出现任意次数
    ws
    weas
    weaeas
    weaeaeas 
    [root@server1 mnt]# grep -E "w(ea){1}s" westos   表示ea出现1次
    weas
    [root@server1 mnt]# grep -E "w(ea){1,}s" westos    表示ea出现一次及以上
    weas
    weaeas
    weaeaeas 
    

    2、sed

    sed 参数 命令 处理对象
    sed 参数 处理对象 -f 处理规则文件

    [root@server1 mnt]# sed 's/nologin/westos/g' passwd      将nologin 替换成westos
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/westos
    daemon:x:2:2:daemon:/sbin:/sbin/westos
    adm:x:3:4:adm:/var/adm:/sbin/westos
    lp:x:4:7:lp:/var/spool/lpd:/sbin/westos
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/westos
    operator:x:11:0:operator:/root:/sbin/westos
    [root@server1 mnt]# vim rule   建立一个规则文件
     s/sbin/lee/g   将sbin替换成lee
    [root@server1 mnt]# sed -f rule passwd    -f指定规则文件 
    [root@server1 mnt]# sed -f rule passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/lee/nologin
    daemon:x:2:2:daemon:/lee:/lee/nologin
    adm:x:3:4:adm:/var/adm:/lee/nologin
    lp:x:4:7:lp:/var/spool/lpd:/lee/nologin
    sync:x:5:0:sync:/lee:/bin/sync
    shutdown:x:6:0:shutdown:/lee:/lee/shutdown
    halt:x:7:0:halt:/lee:/lee/halt
    

    2.1 sed命令中的显示动作

    p 表示显示

    [root@server1 mnt]# sed 5p passwd    
    r1oot:x:0:0:root:/root:/bin/bash
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin   第5行多显示一次
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed -n 5p passwd    -n表示模式空间屏蔽掉,只显示第5行
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@server1 mnt]# sed -n 3,5p passwd   显示第3行到第5行
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@server1 mnt]# sed -ne '3p;5p' passwd     表示第三行和第五行 ,-e表示多个策略,多个策略用;号隔开
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@server1 mnt]# sed -n '/^r/p' passwd       /^r/p  表示显示以r开头的
    r1oot:x:0:0:root:/root:/bin/bash
    [root@server1 mnt]# sed -n '/bash$/p' passwd    /bash$/  表示显示以bash结尾的
    r1oot:x:0:0:root:/root:/bin/bash
    [root@server1 mnt]# sed -n '/bash$/!p' passwd    /bash$/!表示不是以bash结尾的
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed -n '$p' passwd      $p表示显示最后一行
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed -n '1p' passwd    1p表示显示第1行
    r1oot:x:0:0:root:/root:/bin/bash
    

    2.2 sed命令中的删除动作

    d表示删除

    [root@server1 mnt]# sed 5d passwd    删除第5行
    r1oot:x:0:0:root:/root:/bin/bash
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed '3,5d' passwd   删除第3行到第5行
    r1oot:x:0:0:root:/root:/bin/bash
    b2in:x:1:1:bin:/bin:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed -e '3d;5d' passwd   删除第3行和第5行
    r1oot:x:0:0:root:/root:/bin/bash
    b2in:x:1:1:bin:/bin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed -e '/^r/d' passwd   删除以r开头
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed -e '/nologin$/d' passwd   删除以nologin结尾的
    r1oot:x:0:0:root:/root:/bin/bash
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    [root@server1 mnt]# sed -e '/nologin$/!d' passwd   删除除了nologin结尾的
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    

    2.3 sed命令中的添加动作

    a 表示添加

    [root@server1 mnt]# cp /etc/fstab .   
    [root@server1 mnt]# cat fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Thu Apr  7 23:55:54 2022
    #
    [root@server1 mnt]# sed '2ahello westos' fstab    表示第2行添加hello westos
    
    #
    hello westos
    # /etc/fstab
    # Created by anaconda on Thu Apr  7 23:55:54 2022
    #
    [root@server1 mnt]# sed '2ahello\nwestos' fstab   表示多行添加  \n表示换行符
    
    #
    hello
    westos
    # /etc/fstab
    # Created by anaconda on Thu Apr  7 23:55:54 2022
    #
    [root@server1 mnt]# sed '$ahello\nwestos' fstab   表示在文件之后添加
    UUID=4dd73a1e-55bd-4848-878d-c67e200f767a /boot                   xfs     defaults        0 0
    /dev/mapper/rhel-swap   swap                    swap    defaults        0 0
    hello
    westos
    [root@server1 mnt]# sed '/#/ahello\nwestos' fstab    表示含有#行后开始添加
    
    #
    hello
    westos
    # /etc/fstab
    hello
    westos
    

    2.4 sed命令中的替换动作

    c表示整行的替换

    [root@server1 mnt]# sed '/sbin/chello westos' passwd     将含有sbin的行替换成hello westos
    r1oot:x:0:0:root:/root:/bin/bash
    hello westos
    hello westos
    hello westos
    hello westos
    hello westos
    hello westos
    hello westos
    hello westos
    [root@server1 mnt]# sed '/^r/chello westos' passwd    表示以r开头的行替换成hello westos
    hello westos
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    m9ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@server1 mnt]# sed '$chello westos' passwd    表示文件最后一行替换成hello westos
    r1oot:x:0:0:root:/root:/bin/bash
    b2in:x:1:1:bin:/bin:/sbin/nologin
    d3aemon:x:2:2:daemon:/sbin:/sbin/nologin
    a4dm:x:3:4:adm:/var/adm:/sbin/nologin
    l5p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    s6ync:x:5:0:sync:/sbin:/bin/sync
    s7hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    h8alt:x:7:0:halt:/sbin:/sbin/halt
    hello westos
    

    2.5 sed命令中的写入动作

    w 表示将符合条件的行写入到指定文件中

    [root@server1 mnt]# sed '/bash/w testfile'  passwd  表示把含bash的行过滤出来写入到指定的文件
    [root@server1 mnt]# cat testfile 
    r1oot:x:0:0:root:/root:/bin/bash
    

    2.6 sed命令中的插入动作

    i 表示插入

    [root@server1 mnt]# vim westos   
    hello
    westos
    linux
    [root@server1 mnt]# sed '/westos/iwestoslinux' westos 
    hello
    westoslinux      在westos上面插入
    westos
    linux
    

    2.7 sed命令中的整合动作

    r 表示整合

    [root@server1 mnt]# vim lee
    123
    [root@server1 mnt]# sed '2rlee' westos   表示将lee文件内容整合到westos文件第二行后
    hello
    westos
    123
    linux
    [root@server1 mnt]# sed '/hello/rlee' westos   表示将lee文件内容整合到hello之下
    hello
    123
    westos
    linux
    

    2.8 sed中对字符的替换

    [root@server1 mnt]# sed 's/:/@@@/g' passwd       表示文件全文所有列所有行:替换成@,s表示所有行,g表示所有列
    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
    sync@@@x@@@5@@@0@@@sync@@@/sbin@@@/bin/sync
    shutdown@@@x@@@6@@@0@@@shutdown@@@/sbin@@@/sbin/shutdown
    halt@@@x@@@7@@@0@@@halt@@@/sbin@@@/sbin/halt
    polkitd@@@x@@@999@@@998@@@User for polkitd@@@/@@@/sbin/nologin
    [root@server1 mnt]# sed '1,5s/:/@@@/g' passwd     表示1到5行被换掉 
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    [root@server1 mnt]# sed '5s/:/@@@/g' passwd    表示第5行替换
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    [root@server1 mnt]# sed '/r/s/:/@@@/g' passwd   表示含有r行的被替换掉
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    polkitd@@@x@@@999@@@998@@@User for polkitd@@@/@@@/sbin/nologin
    [root@server1 mnt]# sed '/root/,/daemon/s/:/@@@/g' passwd   表示root字符到daemon字符之间的被替换
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    [root@server1 mnt]# sed -e '7s/:/@@@/g;5s/:/@@@/g' passwd   表示第7行和第5行被替换,多个策略用;隔开
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown@@@x@@@6@@@0@@@shutdown@@@/sbin@@@/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    [root@server1 mnt]# sed -e '$s/:/@@@/g' passwd    表示最后一行被替换
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    polkitd@@@x@@@999@@@998@@@User for polkitd@@@/@@@/sbin/nologin
    [root@server1 mnt]# cp /etc/fstab  .  
    [root@server1 mnt]# sed 's/#/ /g' fstab    将全文#号替换成空格
    
     
      /etc/fstab
      Created by anaconda on Thu Apr  7 23:55:54 2022
     
      Accessible filesystems, by reference, are maintained under '/dev/disk'
      See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     [root@server1 mnt]# sed 's/#/ /g' -i fstab     -i 表示把替换后的结果保存到原文件中
    [root@server1 mnt]# cat fstab 
    
     
      /etc/fstab
      Created by anaconda on Thu Apr  7 23:55:54 2022
     
      Accessible filesystems, by reference, are maintained under '/dev/disk'
      See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     [root@server1 mnt]# sed 's/\//###/g' fstab   将/ 替换成###,/为特殊字符需要转译/\//
    
     
      ###etc###fstab
      Created by anaconda on Thu Apr  7 23:55:54 2022
     
      Accessible filesystems, by reference, are maintained under '###dev###disk'
      See man pages fstab(5), findfs(8), mount(8) and###or blkid(8) for more info
    
    / 分隔符不好看可以用@分隔符
    
     [root@server1 mnt]# sed 's@/@###@g' fstab
      ###etc###fstab
      Created by anaconda on Thu Apr  7 23:55:54 2022
     
      Accessible filesystems, by reference, are maintained under '###dev###disk'
      See man pages fstab(5), findfs(8), mount(8) and###or blkid(8) for more info 
    

    3. 报告生成器awk

    用法:awk -F 分隔府 BEGIN{}{}END{}FILENAME

    NR行数
    NF列数
    FILENAME文件名称本身
    westoswestos变量值
    “westos”westos字符串
    [root@server1 mnt]# cp /etc/passwd .
    [root@server1 mnt]# awk -F : 'BEGIN{print "westos"}' passwd   -F指定分隔符,"westos"  带双引号为字符,不带双引号为变量直
    westos
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print $1}' passwd  先打印start再打印所有行的第一列; BEGIN表示开始做的事情,$1表示打印所有行的第一列
    start
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator
    games
    ftp
    nobody
    dbus
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print $1}END{print "end"}' passwd   end 表示在完成之后所做的事情
    start
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator
    games
    ftp
    nobody
    dbus
    end
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print $3,$4}END{print "end"}' passwd    $3,$4  表示第三列和第四列
    start
    0 0
    1 1
    2 2
    3 4
    4 7
    5 0
    6 0
    7 0
    8 12
    11 0
    12 100
    14 50
    99 99
    81 81
    end
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print $0}END{print "end"}' passwd   $0表示所有的列
    start
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    end
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print NF}END{print "end"}' passwd   NF表示每一行的列数
    start
    7
    7
    7
    7
    7
    7
    7
    7
    7
    7
    7
    7
    7
    7
    end
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print NR}END{print "end"}' passwd   NR表示行号
    start
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    end
    [root@server1 mnt]# awk -F : 'BEGIN{print "start"}{print FILENAME}END{print "end"}' passwd   FILENAME表示文件本身名称
    start
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    passwd
    end
    

    /bash$/ 条件
    /条件1|条件2/ 条件1或者条件2
    /条件1/||/条件2/ 条件1或者条件2
    /条件1/&&/条件2/ 条件1并且条件2

    [root@server1 mnt]# awk -F : '/bash/{print $1}' passwd    打印以bash结尾的行的第一列
    root
    [root@server1 mnt]# awk -F : '/bash|nologin/{print $1}' passwd    打印以bash或者以nologin结尾行的第一列(一个条件里有两个元素)
    root
    bin
    daemon
    adm
    lp
    mail
    operator
    games
    ftp
    nobody
    dbus
    [root@server1 mnt]# awk -F : '/bash/||/nologin/{print $1}' passwd     打印以bash或者以nologin结尾行的第一列(两个条件的或者关系)
    root
    bin
    daemon
    adm
    lp
    mail
    operator
    games
    ftp
    nobody
    dbus
    [root@server1 mnt]# awk -F : '/^root/&&/bash/{print $1}' passwd    打印以root开头并且bash结尾行的第一列
    root
    [root@server1 mnt]# awk -F : '!/^root/&&/bash/{print $1}' passwd   打印不是以root开头并且以bash结尾的第一列
    test
    [root@server1 mnt]# awk -F : '$7~/bash/{print $1,$7}' passwd  表示第7列结尾含有bash字符的,打印该行的第一列和第7列
    root /bin/bash
    test /sbin/bash
    [root@server1 mnt]# awk -F : '$7!~/bash/{print $1,$7}' passwd 表示第7列结尾不含有bash字符的,打印该行的第一列和第7列
    bin /sbin/nologin
    daemon /sbin/nologin
    adm /sbin/nologin
    lp /sbin/nologin
    sync /bin/sync
    shutdown /sbin/shutdown
    halt /sbin/halt
    mail /sbin/nologin
    operator /sbin/nologin
    games /sbin/nologin
    ftp /sbin/nologin
    nobody /sbin/nologin
    dbus /sbin/nologin
    

    4、脚本练习

    Apache_port.sh
    此脚本接入数字,http的端口就改为数字,假设selinux为关闭状态
    例如:
    sh Apache_port.sh
    ERROR: Pleaase input port number following script !!
    sh Apache_port.sh 8080
    apache的端口会被修改为8080

    [root@server1 mnt]# vim Apache_port.sh
    #!/bin/bash
    [ -z "$*" ] && {
       echo "Error: Please input port number following script !!"
       exit
       }
    
    rpm -q httpd &> /dev/null || {
      echo "Error: Apache is not installd !!"
      }
    
    netstat -antlupe  | grep -E "\<$*\>" &> /dev/null && {
        echo "Error: $* is in usd!!"
        exit
    }
    
    sed "/^Listen/cListen $*" -i /etc/httpd/conf/httpd.conf
    systemctl restart httpd 
    

    统计在系统中能su切换的用户

    [root@server1 mnt]# grep -E "\
  • 相关阅读:
    Central Limit Theorem
    什么?MySQL的等值查询竟然出错了??
    数据结构之赫曼夫树(哈曼夫树)
    CImage通过WinApi的SetWorldTransform来实现图片旋转
    【Docker】Python Flask + Redis 练习
    最短路径算法-迪杰斯特拉(Dijkstra)算法在c#中的实现和生产应用
    做个清醒的程序员之拥抱AI
    网页的用户注册功能
    高并发下秒杀促销活动,你必须知道的9个细节
    MR案例 - TopNScore [成绩分组排行榜]
  • 原文地址:https://blog.csdn.net/qq_43114229/article/details/126701696