zoukankan      html  css  js  c++  java
  • shell三剑客介绍及实例

    Linux三剑客指的是grep、sed、awk,配合正则表达式使用就非常强大,笔者个人感觉会使用普通的场景就足够工作中适用了,其中grep擅长查找功能,sed擅长取行和替换。awk擅长取列,笔者分别针对这些功能列举语法以及实际案例。新手入门,如有问题,欢迎指正 ~ 

    最开始,先介绍一下管道的概念,| 这个竖线就是管道的意思,后文中会持续用到该符号,作用就是将前一个命令的输入输送给 | 后面的命令,可以进行多重管道,例如:

    一、grep

      grep作用是筛选,查询

      1. 语法规则

      Usage: grep [选项]... 匹配项 [文件]...

      支持的正则 描述

       

      -E,--extended-regexp 模式是扩展正则表达式(ERE)

      -e,--regexp=PATTERN 使用模式匹配,可指定多个模式匹

      -f,--file=FILE 从文件每一行获取匹配模式

      -i,--ignore-case 忽略大小写

      -w,--word-regexp 模式匹配整个单词

      -x,--line-regexp 模式匹配整行

      输出控制 描述

      -m,--max-count=NUM 输出匹配的结果 num 数

      -n,--line-number 打印行号

      -H,--with-filename 打印每个匹配的文件名

      -h,--no-filename 不输出文件名

      -o,--only-matching 只打印匹配的内容

      -q,--quiet 不输出正常信息

      -s, --no-messages 不输出错误信息

      -r,--recursive 递归目录

      -c,--count 只打印每个文件匹配的行数

      --include=FILE_PATTERN 只检索匹配的文件

      --exclude=FILE_PATTERN 跳过匹配的文件

      --exclude-from=FILE 跳过匹配的文件,来自文件模式

      --exclude-dir=PATTERN 跳过匹配的目录

      -v,--invert-match 打印不匹配的行

      

      内容行控制 描述
      -B,--before-context=NUM 打印匹配的前几行

      -A,--after-context=NUM 打印匹配的后几行

      -C,--context=NUM 打印匹配的前后几行

      --color[=WHEN], 匹配的字体颜色

        2. 案例

      # 很常用的使用 grep 筛选 目前服务器 使用的java tomcat nginx进程

      

      # 查询日志关键词 -e 达标多个条件

      

      #  输出查询内容后5行的日志 

      

       #   通过正则来筛选结果 

       #   查询以 ACTIVITY 开头的日志

      

       #   查询所有出现的时间  

      

       #  查询出所有符合条件的IP地址

      

    二、sed

      sed作用是过滤和替换文本。

      1. 语法规则 

      sed [选项] '地址 命令' file 

      选项 描述
      -n 不打印模式空间
      -e 执行脚本、表达式来处理
      -f 执行动作从文件读取执行
      -i 修改原文件
      -r 使用扩展正则表达式

      地址 描述
      first~step 步长,每 step 行,从第 first 开始
      $ 匹配最后一行
      /regexp/ 正则表达式匹配行
      number 只匹配指定行
      addr1,addr2 开始匹配 addr1 行开始,直接 addr2 行结束
      addr1,+N 从 addr1 行开始,向后的 N 行
      addr1,~N 从 addr1 行开始,到 N 行结束

      命令 描述
      s/要替换的内容/替换成的内容/ 替换字符串
      p 打印当前模式空间
      P 打印模式空间的第一行
      d 删除模式空间,开始下一个循环
      D 删除模式空间的第一行,开始下一个循环
      = 打印当前行号

      2. 案例

       #  替换输入内容(其中不以g结尾是替换每行中的第一个"11",否则就是替换所有的"11")

      

      # 替换文件内容并覆盖(-i 参数 代表替换文件内容)

      

    三、awk

      awk是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件、数据排序、计算以及生成报表等等。

      1. 语法规则 

      基本的命令语法:awk option 'pattern {action}' file

      其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号用于根据特定的模式对一系列指令进行分组。

      选项 描述
      -f program-file 从文件中读取 awk 程序源文件

      -F fs 指定 fs 为输入字段分隔符

      -v var=value 变量赋值

      pattern (匹配模式)

      /regular expression/ 为每个输入记录匹配正则表达式

      pattern && pattern 逻辑 and,满足两个模式

      pattern || pattern 逻辑 or,满足其中一个模式

      ! pattern 逻辑 not,不满足模式

      

      BEGIN{ } 给程序赋予初始状态,先执行的工作

      END{ } 程序结束之后执行的一些扫尾工作

      2. 案例

       #  输出指定列 

       

       # 指定分隔符 

      

       # BEGIN END的使用(可以用作格式化输出,也可以在其中做一些初始化,以及收尾的工作)

       #  格式化输入

      

      #  初始化分隔符和换行符,最后列数与记录数

      

       其中: FS 输入字段分隔符,默认是空格或制表符

           RS 输入记录分隔符,默认是换行符

           NF 统计当前记录中字段个数

           NR 统计记录编号,每处理一行记录,编号就会+1

      #  使用正则的场景(筛选出符合条件的列,按照默认空格切分后,输出第三列)

      

    写在文末:列举了这么多,实际都是想象中的用法,实际工作中我目前只用到了 grep的简单场景,如有啥问题,请多包涵【狗头】

      

  • 相关阅读:
    str_split 分隔中文出现乱码 替代函数
    PHP 浮点数 转化 整数方法对比 ceil,floor,round,intval,number_format
    php 判断字符串之间包含关系
    不解之谜
    正则匹配 特殊的 符号
    PHP 判断字符串 是否 包含另一个字符串
    PHP 删除 数组 指定成员
    HTML 权重标签的使用
    【PAT甲级】1094 The Largest Generation (25 分)(DFS)
    【PAT甲级】1093 Count PAT's (25 分)
  • 原文地址:https://www.cnblogs.com/leixs/p/14027341.html
Copyright © 2011-2022 走看看