详解sed命令与awk命令

文章目录

  • sed命令
    • 功能
    • 语法格式
    • 命令选项
    • 动作说明
    • 使用介绍
  • awk命令
    • 功能
    • 语法
  • 案例
    • 编写一个监控CPU和内存使用率的脚本
    • 编写按文件大小排序输出的脚本
  • 参考文章


sed命令

功能

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

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

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

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

语法格式

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

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

命令选项

详解sed命令与awk命令_第1张图片

动作说明

[n1,[n2]]function

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

function为编辑指令,可以为增删改查等指令。
详解sed命令与awk命令_第2张图片

使用介绍

详解sed命令与awk命令_第3张图片
详解sed命令与awk命令_第4张图片

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

运行结果
详解sed命令与awk命令_第5张图片

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

  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

验证结果
详解sed命令与awk命令_第6张图片

参考文章

awk命令详解
sed命令

你可能感兴趣的:(linux,运维,服务器)