• Linux四剑客find/grep/awk/sed


    find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt ;

    这条命令表示找当前目录(-maxdepth 1,没这条是递归找当前目录的所有子目录)且是文件的(-type f)且两天以内创建的(-mtime -2,如果是+2表示两天前创建的,还可以-mmin以分钟为单位),且名字是匹配*txt(linux通配符和regex不同,linux自带的特殊字符

    必须在""内)然后将这些文件执行mv命令,第一个参数是{}它来自前面找到的所有文件,第二个参数是要移动的目标位置(如果是目录则只是移动,如果是文件则表示同时要改名),最后的;是find执行exec的固定格式不用管;

    find是通过查找文件名来找出文件

    grep 可以通过-v搜索出匹配的行的其他行,如grep -v '^$' log.log表示搜索出文件里所有的非空行;还可以多次grep来串行过滤;

    grep是搜索文件内容(后面还加了xargs则会导致无法串行的grep过滤,这个时候就要用到awk作为后面grep参数的提供者;但是如果只是普通的先过滤ip,再过滤是否登录这样的场景可以连续用两个grep)

    awk 也是搜索文件内容,但它可以以对列进行排除显示(grep是显示行),如awk -F ':' '{print $1}' log.log表示将文件中以:分割的字符串拆分成N列,以下标1开始,这里打印第一列;

    awk可以一次性指定多个分隔符,如awf -F '[-, ]'就指定了-,和空格三个分隔符;awk会保留空列这和java的split是不一样的,java如[a如果以[为分隔符,那么只有一列,而awk则是有两列,且[a[[是会有5列;

    awk也是支持正则搜索的,比如 awk -F '[-,]' '/^root/{print $0}'就用到了正则,表示搜索以root开头的行,并打印整行($0)

    而且他的-F参数也支持正则如 awk -F '[/]+'表示以/或//或///。。。这些作为分隔符来分隔(对url很有效),且总以最长的为准;

    awk的数组是直接 awk -F '[/]+' '{map[$2]++} END {for(key in map) print key,map[key]}' 1.txt,这个语法有点怪(END必须是大写),这个map其实更应该理解为HashMap,$2是key,而value则是相同key的行数,这里对key起到了一个distinct的作用;

    sed读和sad一样,它是对输出的内容修改后显示,但是不会修改源文件,如sed 's/aaa/bbb/' log.log表示显示文件内容之前对显示的内容是aaa的修改为bbb进行显示(s是替换,p表示打印,这里不能加p否则会重复打印),这个可以用#代替/号

    sed -n '...'的-n表示安静模式,需要结合p来实现只有被处理过的那行才显示,如果没有p动作那么即便某行有被处理也不会显示,如果没有-n却有p动作那么将会有重复显示,其实就可以理解为sed提供了一个简单的前置grep,不用先grep出要处理的行,然后再通过管道符sed;

    sed分为参数和动作,-n是参数向s、p、a之类的是动作,而动作又分前置和后置,s是前置,因为它要求将第一个/../的参数以第二个/../的来替换,而c取代的意思是/a/c mm表示将a用mm来取代(c是把整行都替换了,而s是替换行里选择的部分);

    sed如果要替换多个字符串不是在前面的参数上加上如's/[,-]//',而是's/,//;s/-//'用分号来分隔(分号后面可以接空格,此空格只是美观作用),但是sed是支持正则表达式的,比如's/d{5}//'表示将连续的5个数字替换为空,但是如果是一行里不连续的替换则只能用;来分别写了;

    还有uniq命令如uniq -i表示对行进行忽略大小写模式的distinct操作;

    sort表示对行进行字典排序,加-u也可以同时进行uniq操作,加-r可以降序,-n表示以数值序排序(10比2前,如果是字典序则2比10前)

    而如果要实现以某列为排序依据可以-t ' ' -k 2表示以空格作为列依据,然后以第二列(k是key的意思)作为排序依据进行排序;

    如果要将管道符前面的结果作为grep搜索的pattern则可以用 grep -oP '[.{3}](?= ip=1.1.1.1)' | xargs -r -I % /bin/grep "[%]" bbb.txt

    一般情况下前面的搜索结果只能作为grep的要搜索的文件的参数而不能是pattern,这里通过xargs -r -I %实现了作为pattern

  • 相关阅读:
    mysql 取出每科成绩前两名
    mysql 数据库以及sql 的优化
    Twitter开源分布式自增ID算法snowflake
    SVN 冲突
    VUE 入门 1 列表、if判断 、双向绑定
    Roadblock
    最大子序和
    SOLDIERS
    绿豆蛙的归宿
    Place the Robots
  • 原文地址:https://www.cnblogs.com/silentdoer/p/10125655.html
Copyright © 2020-2023  润新知