zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    KnockoutJS 3.X API 第五章 高级应用(4) 自定义处理逻辑
    KnockoutJS 3.X API 第五章 高级应用(3) 虚拟元素绑定
    KnockoutJS 3.X API 第五章 高级应用(2) 控制后代绑定
    KnockoutJS 3.X API 第五章 高级应用(1) 创建自定义绑定
    KnockoutJS 3.X API 第四章(14) 绑定语法细节
    KnockoutJS 3.X API 第四章(13) template绑定
    KnockoutJS 3.X API 第四章 表单绑定(12) selectedOptions、uniqueName绑定
    KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
    KnockoutJS 3.X API 第四章 表单绑定(10) textInput、hasFocus、checked绑定
    KnockoutJS 3.X API 第四章 表单绑定(9) value绑定
  • 原文地址:https://www.cnblogs.com/silentdoer/p/10125655.html
Copyright © 2011-2022 走看看