sed
(Stream EDitor),流文件编辑器。特点如下
非交互式
处理文件时,把当前处理的行存储在临时缓冲区(称为模式空间
)中,即它是基于模式匹配过滤及修改文本。(类比Vim
是一个交互的编辑器)
逐行处理
sed命令在缓冲区中一次处理一行内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。
正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改。如果希望直接修改文件内容,应添加-i选项
。(谨慎使用)
总结
sed主要用来编辑一个或多个文件,简化对文件的反复操作(如:输出、删除、替换、复制、剪切、导入、导出等等各种操作)或者用来编写转换程序等。
前置命令 | sed [选项] '[定址符]处理动作' [input-file]
sed [选项] '[定址符]处理动作' [input-file]
处理动作可以由-e
指定多个处理动作,input-file为输入文件,可以指定多个。
[n1,[n2]]function
其中[n1,[n2]]称为定址符
,用来定义需要操作的文本,如指定处理的起,止行数。
n1,n2不见得会存在,一般代表“选择进行动作的行数”。
地址可表示为文本的行号
,或者用来匹配的正则表达式
。
省略定址符时,默认逐行处理全部文本。
function
为编辑指令,可以为增删改查等指令。
awk是专门为文本处理设计的编程语言
,是一门数据驱动的编程语言,与sed类似都是以数据驱动的行处理软件,主要用于数据扫描、过滤、统计汇总
工作,数据可以来自标准输入,管道或者文件。
awk是一种处理文本文件的编程语言,文件的每行数据都称为记录
(类比sed命令的模式空间),默认以空格或制表符为分隔符,每条记录被分为若干字段(列)
,awk每次从文件中读取一条记录。
awk [选项] '条件{动作} 条件{动作} ... ....' 文件名
awk语法由一系列条件和动作组成,在花括号内可以有多个动作,多个动作之间是用分号隔开,在多个条件和动作之间可以有若干空格,也可以没有。
如果没有指定条件匹配所有数据,如果没有指定动作则默认为print打印。
awk常用内置变量
变量名 | 描述 |
---|---|
FILENAME | 当前输入文档的名称 |
FNR | 当前输入文档的当前行号,尤其是当有多个输入文档时有用 |
$0 | 输出当前行的全部数据内容 |
$n | 当前行的第n个字段的内容(n>=1) |
NF | 当前记录(行)的字段(列)个数 |
FS | 字段分隔符,默认为空格或Tab制表符 |
OFS | 输出字段分隔符,默认空格 |
ORS | 输出记录分隔符,默认为换行符\n |
RS | 输入记录分隔符,默认为换行符\n |
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
验证结果