• 详解sed命令与awk命令



    sed命令

    功能

    sed(Stream EDitor),流文件编辑器。特点如下

    非交互式
    处理文件时,把当前处理的行存储在临时缓冲区(称为模式空间)中,即它是基于模式匹配过滤及修改文本。(类比Vim是一个交互的编辑器)
    逐行处理
    sed命令在缓冲区中一次处理一行内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。

    正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改。如果希望直接修改文件内容,应添加-i选项。(谨慎使用)

    总结
    sed主要用来编辑一个或多个文件,简化对文件的反复操作(如:输出、删除、替换、复制、剪切、导入、导出等等各种操作)或者用来编写转换程序等。

    语法格式

    1. 前置命令 | sed [选项] '[定址符]处理动作' [input-file]
    2. sed [选项] '[定址符]处理动作' [input-file]

    处理动作可以由-e指定多个处理动作,input-file为输入文件,可以指定多个。

    命令选项

    在这里插入图片描述

    动作说明

    [n1,[n2]]function
    
    • 1

    其中[n1,[n2]]称为定址符,用来定义需要操作的文本,如指定处理的起,止行数。
    n1,n2不见得会存在,一般代表“选择进行动作的行数”。
    地址可表示为文本的行号,或者用来匹配的正则表达式
    省略定址符时,默认逐行处理全部文本。

    function为编辑指令,可以为增删改查等指令。
    在这里插入图片描述

    使用介绍

    在这里插入图片描述
    在这里插入图片描述

    awk命令

    功能

    awk是专门为文本处理设计的编程语言,是一门数据驱动的编程语言,与sed类似都是以数据驱动的行处理软件,主要用于数据扫描、过滤、统计汇总工作,数据可以来自标准输入,管道或者文件。

    语法

    awk是一种处理文本文件的编程语言,文件的每行数据都称为记录(类比sed命令的模式空间),默认以空格或制表符为分隔符,每条记录被分为若干字段(列),awk每次从文件中读取一条记录。
    awk [选项] '条件{动作} 条件{动作} ... ....' 文件名

    awk语法由一系列条件和动作组成,在花括号内可以有多个动作,多个动作之间是用分号隔开,在多个条件和动作之间可以有若干空格,也可以没有。
    如果没有指定条件匹配所有数据,如果没有指定动作则默认为print打印。

    awk常用内置变量

    变量名描述
    FILENAME当前输入文档的名称
    FNR当前输入文档的当前行号,尤其是当有多个输入文档时有用
    $0输出当前行的全部数据内容
    $n当前行的第n个字段的内容(n>=1)
    NF当前记录(行)的字段(列)个数
    FS字段分隔符,默认为空格或Tab制表符
    OFS输出字段分隔符,默认空格
    ORS输出记录分隔符,默认为换行符\n
    RS输入记录分隔符,默认为换行符\n

    案例

    编写一个监控CPU和内存使用率的脚本

    1 #!/bin/bash
      2 echo "Start user system monitor......"
      3 now=`date +'%Y-%m-%d %H:%M:%S'`
      4 echo "Time:$now"
      5 cpu(){
      6     User_cpu_use=`top -b -n 1| grep $1|awk '{sum +=$9}END{print sum}'`
      7     echo "$1 use cpu: $User_cpu_use"
      8 }
      9 memery(){
     10     User_mem_use=`top -b -n 1|grep $1|awk '{sum +=$10}END{print sum}'`
     11     echo "$1 use memery: $User_mem_use"
     12     if [ $(echo "$User_mem_use >= 50"|bc) = 1 ];
     13     then
     14         echo "Memery warnning!"
     15     fi
     16 }
     17 #$1 is username , $2 is set time
     18 while true
     19 do
     20     cpu $1
     21     memery $1
     22     sleep $2
     23 done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    运行结果
    在这里插入图片描述

    编写按文件大小排序输出的脚本

      1 #!/bin/bash
      2 #$1 is sort way , $2 is the path
      3 fun(){
      4     `ls -lhSr ../ |sed '/^-/! d'|awk '$5=$5"-"'|awk '{print $5 $9}' > tmp.log`
      5     echo "--ok"
      6 }
      7 fun $1 $2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    验证结果
    在这里插入图片描述

    参考文章

    awk命令详解
    sed命令

  • 相关阅读:
    linux deepin系统 php多版本
    爆肝一个月,从博物馆到自然景区,整合了100个值得逛的3D游园景点,让你足不出户玩转中秋!
    计算小于或等于n的非负整数区间包含的1的数量
    Paragon NTFS for Mac工具优势
    Python二级 每周练习题22
    JSP实现小区物业管理系统
    上市公司女性高管指标数据1999-2020年(含stata代码)
    iOS 关于UIDatePicker、UIPickerView常见使用方法
    Spring Boot 最佳实践
    Python实战——Selenium与iframe结合应用
  • 原文地址:https://blog.csdn.net/m0_56145255/article/details/126322107