• [svc]find+xargs/sed&sed后向引用+awk多匹配符+过滤行绝招总结&&产生随机数


    30天内的文件打包

    find ./test_log -type f -mtime -30|xargs tar -cvf test_log.tar.gz
    

    find,文件+超过7天+超过1M的+按日期为文件名压缩

    注意: exec没-i, xargs如果有引用需要加上-i

    find xargs
        -type
        -name
        -size
        -mtime
    find /tmp/ -type f -mtime +7 -size +1M|xargs -i tar -zcvf access.log.tar.gz {}
    find /tmp/ -type f -mtime +7 -size +1M -exec tar -zcvf access.log.tar.gz {} ;
    
    - 文件+超过7天+超过1M的+按日期为文件名压缩
    find /tmp/ -type f -mtime +7 -size +1M -exec tar -zcvf access_$(date +%F -d -1day).log.tar.gz {} ;
    

    find+sed批量查找替换

    find . -type f -name '*.md'|xargs sed -i 's#maotai#maomao#g'
    

    find删除

    find . -type f -name '*.md'|xargs -i rm -f {}
    
    find . -type f -name '*.md' -exec rm -f {} ;
    1,-exec
    2,-exec没-i
    3,-exec后面有 ;
    

    sed和awk的2个绝招

    • sed后向引用
    • awk多分割过滤

    过滤ip

    - sed实现(后向引用)
    ifconfig eth0|sed -n '2p'|sed -n 's#^.*inet ##gp'|sed -n 's#  ne.*$##gp'
    ifconfig eth0|sed -nr '2s#^.*net (.*)  net.*$#1#gp'
    
    - awk实现(多分割)
    [root@n1 test]# ifconfig eth0|awk -F '[ ]+' 'NR ==2 {print $3}'
    192.168.14.11
    

    过滤文件权限

    [root@n1 test]# ll test.md |awk '{print $1}'|tr 'rwx-' '4210'|awk -F '' '{print $2+$3+$4""$5+$6+$7""$8+$9+$10}'
    644
    
    - sed实现(后向引用)
    [root@n1 test]# stat test.md |sed -nr 's#^.*(0(.*)/-.*$#1#gp'
    644
    
    - awk实现(多分割)
    [root@n1 test]# stat test.md|awk -F '[(/]' 'NR==4 {print $2}'
    0644
    

    过滤/etc/passwd的20-30行

    • 使用强悍的sed
    • 使用awk的条件

    sed过滤行

    sed -n '10p' /etc/passwd
    sed -n '10,20p' /etc/passwd
    

    awk条件过滤行

    - 方式1: 通过NR来控制
    cat /etc/passwd|awk 'NR>10 && NR <20'
    cat /etc/passwd|awk -F ':' 'NR>10 && NR<20 {print $1}'
    注:NR在{}外
    
    - 方式2:通过if语句
    cat /etc/passwd|awk -F ':' '{if($3>3) print $3}'
    注: 这种if在{}里
    

    awk求和

    [root@localhost ~]# awk -F ':' '{(s+=$3)}; END {print s}' /etc/passwd
    2891
    
    

    产生随机数

    - head截取(不换行)
    [root@n1 ~]# echo $RANDOM|md5sum|head -c 10
    7f30eab068[root@n1 ~]#
    
    - cut截取
    [root@n1 ~]# echo $RANDOM|md5sum|cut -c 1-10
    efc85e6acd
    
  • 相关阅读:
    2016年第七届蓝桥杯C/C++ A组国赛 —— 第一题:随意组合
    寻找段落
    攻击火星
    图论入门
    实数加法
    求 10000 以内 n 的阶乘
    大整数因子
    计算2的N次方
    大整数减法
    大整数加法
  • 原文地址:https://www.cnblogs.com/iiiiher/p/8507948.html
Copyright © 2020-2023  润新知