1、sed编辑器
sed编辑器也称为流编辑器 ,流编辑器是在编辑数据之前,预先指定数据的编辑规则,然后按照规则将数据输出到标准输出。在流编辑器的所有规则与输入的行匹配完毕以后,编辑器读取下一行,重复之前的规则。处理完所有数据后,流编辑器停止。因此sed是面向行的,并且sed并不会修改文件本身,除非使用重定向存储输出,所以sed是比较安全的。
sed支持在命令行直接指定文本编辑命令,具体格式如下:
sed [options] 'command' file(s)
command为具体的文本编辑命令,而file为输入的文件。
如将日志文件中的xxx替换成test输出:
sed `s/xxx/test/` test.log | head -10
s表示执行的是文本替换命令,将xxx替换成yahoo.
筛选日志中指定的行输出:
sed -n `2,6p` test.log
-n参数表示只输出指定的行,而`2,6p`表示选择的是第二行与第六行之间的行。
sed '/qq/d' test.log
d表示执行的是文本删除命令,将包含qq的行删除。
显示文件行号:
sed '=' test.log
=命令用来显示文件行号
sed -e 'i\head' test.log | head -10
i命令用来在行首插入内容,i\head表示在每行的前面插入head字符串。
在行末追加文件:
sed -e 'a\end' test.log | head -10
a命令用来在行末追加内容,a\end表示在每一行的末尾追加end字符串。
sed -e '/google/c\hello' test.log | head -10
c命令用于对文本进行替换操作,查找/google/匹配的行,用hello对匹配的行进行替换。
可以将多个命令合并起来使用,使用分号分割:
sed-n '1,5p;1,5=' test.log
上面是两条命令,第一个是打印出第一行到第五行,第二条命令是将第一行到第五行每一行的行号打印出来。
如果编辑命令较为复杂,也支持将文本处理命令定义在文件中,具体的格式如下:
sed [option] -f scriptfile file(s)
比如下面的几条命令,将xxx替换成ttb,然后打印第一行到第六行,并且输出行号:
s/xxx/ttb
1,6p
1,6=
将这些内容放在文件testsed中,通过-f参数来指定文件,执行命令:
sed -n -f testsed test.log