一、Sed概述
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
文件内容并没有改变,除非你使用重定向存储输出
二、sed命令
常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的
内容一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特
殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行
filename 内的sed 动作;
-r∶sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表
示法语法)
-i∶直接修改读取的档案内容,而不是由屏幕输出。
常用命令
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下
一行)
c:取代, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行
d:删除,d 后面通常不接任何内容
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一
行)
p:列印,即将某个选择的内容打印出来。通常 p 会与参数 sed -n 一起运
作
s:替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示
法,例如 1,20s/old/new/g 就是啦
三、awk概述
相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理。 因此,awk 相当的适合处理小型的数据数据处理
四、常用命令选项
-F fs: fs指定输入分隔符,可以是字符串或正则表达式
-v:var=vaelue 赋值一个用户定义变量,将外部变量传递给awk
-f:scripfile 从脚本文件中读取awk命令
五、awk脚本
awk脚本是由模式和操作组成的
模式:
模式可以是以下任意一个:
•/正则表达式/:使用通配符的扩展集。
•关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串
或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
•模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
•模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
•BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在
这里设置全局变量。
•END:让用户在最后一条输入记录被读取之后发生的动作
操作:操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,
并位于大括号内。主要有四部份:
•变量或数组赋值
•输出命令
•内置函数
•控制流命令
六、awk脚本基本结构
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands
}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全
部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块
七、awk内置变量
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字
段。
$0 这个变量包含执行过程中当前行的文本内容。
FNR 同NR,但相对于当前文件。
FS 字段分隔符(默认是任何空格)
NF 表示字段数,在执行过程中对应于当前的字段数
NR 表示记录数,在执行过程中对应于当前的行号
OFS 输出字段分隔符(默认值是一个空格)
RS 记录分隔符(默认是一个换行符)
ORS 输出记录分隔符(默认值是一个换行符)