什么是sed
sed全名叫stream editor,流编辑器,用程序的方式来编辑文本
2. sed处理原理
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。
具体过程如下:
首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间 pattern space)然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。注1:sed读入一行,会去掉尾部换行符(但会保留$),存入pattern space,然后执行编辑命令
注2:sed与shell一致,双引号内的内容可以转义,单引号中的内容都被原样输出
3. sed命令和选项
4. sed常用命令
4.1 基础
“$"符号,表示最后一行关于地址:地址是一个数字,则表示行号,具体示例如下:
4.2 替换 —— s命令
4.3 整行插入 —— i命令(insert)a命令(append)
4.4 删除 —— d命令
4.5 针对特定的行进行替换 —— s命令
4.6 整行替换 —— c命令
4.7 循环
示例1:
解析:
:loop(该循环名称可以自定义比如:a) —— 表示sed进入循环,逐行将文本读入Pattern Space
N —— 这里就是循环体里面所做的操作(当然我们也可以进行其他操作)N表示将文本的下一行追加到Pattern space,产生一个新行。(在使用N的时候两行之间的$会取消)
$ —— 判断循环是否结束的条件;这里的$表示如果遇到最后一行则退出循环(当然也可以其他条件)
!bloop —— 循环结束标志,sed遇到最后行将退出循环否则返回loop(进入循环的标志如果定义的是:a,那么退出循环的标志就是!ba)
最后针对Pattern Space中的内容执行替换操作,s将回车(\n)替换成制表符(\t)
示例2:两行合并为一行(读入一行之后,在将下一行追加到pattern space,然后执行替换)
示例3:
看完之后头大,不仅长,而且有很多不认识的字符组合,别着急,一句一句的看:
/afd_dsp_service_0/ —— 找出文件中包含afd_dsp_service_0的行,并对匹配的行做后续操作命名
{} —— 内代表的是一组按照顺序执行的命令
:a —— 表示sed进入循环,逐行将文本读入Pattern Space;a表示循环名称,改名称也可以自定义比如:loop
N —— 这里就是循环里面所做的操作(当然我们也可以进行其他操作)N表示将文本的下一行追加到Pattern space,产生一个新行。(在使用N的时候两行之间的$会取消)
/service : bns\s:./!ba —— 循环结束的条件,匹配到 service : bns\s:. 之后,执行 !ba,!ba就是结束循环的意思;如果进入循环的时候定义的标签是:loop,那么结束循环就是!bloop
s/service:*.*/service:list:\/\/%s/g —— 针对读到Pattern space中的内容,执行替换操作