详解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

其中[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 #!/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

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

参考文章

awk命令详解
sed命令

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacky~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值