1 sed简介
sed是一种在线编辑器、行编辑器,一次处理一行内容,在处理时,把当前处理的行为存储在临时缓冲区中,该缓冲区为模式空间(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出,然后接着去处理下一行,重复完成的操作,直至文件末尾;sed处理的整个过程中,对象文件的内容并没有改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作过程。
sed和文本处理工具vim、grep是有区别的,vim是一种交互式的文本编辑工具,而sed是一种非交互式的文本编辑器(通过给定的条件自动逐行去处理文件);grep虽然也是一种流式的文本处理工具,但grep是用来检索条件关键字的,而sed却是搜索匹配处理文本工具。
sed所具有的功能有:数据的替换、删除、新增等,这里的数据可以是一些关键字,也可以是一些特定的行。
2 sed用法
sed的语法结构:
sed [OPTION] ... {script} [input-file] ... [actions]
[OPTION]
-r:支持扩展的正则表达式
-n:静默模式
-e script1 -e script2 -e script3:指定多脚本运
-f /path/to/script_file:从指定的文件中读取脚本并运行
-i:直接修改源文件
sed的地址定界(抽取的域)
#:#表示数字,指定行
$:最后一行
/regexp/:任何能够被regexp所匹配到的行
\%regexp%:同上,只不过换作%为regexp边界符
startline,endline:
#./regexp/:从#开始,到第一次被/regexp/所匹配到的行结束,中间所有的行
#1,#2:从#1行到#2行
/regexp1/,/regexp2/:从第一次被/regexp1/匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间所有的行
#,+n:从#行开始,一直到向下的n行
first-step:指定起始行,以及步长
sed的编辑命令
d:删除模式空间中的行;
=:为模式空间中的行打印行号;
a \text:在行号后面追加文本,支持使用\n实现多行追加;
i \next:在行面前插入文本,支持使用\n实现多行插入;
c \next:用text替换匹配到的行;
p:打印模式空间中的行;
s/regexp/replacement/:替换由regexp所匹配到的内容为replacement(支持使用其他分隔符如:s@@@。s###;条件是该分隔符在后面的模式中没有出现过),对于替换还有两个后选项g和i,分别表示如下:
g:全局替换;
- i:不区分大小写
w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中;
r /path/from/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并;