sed 流编辑器
- 逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然
后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理
完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
- 相关命令:
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用”\”续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\”续行
d 删除行
p 打印行
s 用一个字符串替换另一个字符串
g 在行内进行全局替换
w将所选的行写入文件
y将字符替换为另一字符(不能对正则表达式使用y命令)
- 相关选项:
-e进行多项编辑,即对输入行应用多条sed命令时使用
-i 直接修改读取的文件内容,而不是输出到屏幕上
-r 让sed支持扩展的正则表达式(默认是基础的正则表达式)
-n 取消默认的输出(默认为输出所有行)
-f指定sed脚本的文件名
- 在字符替换中,可能会遇见引号,“/”等的替换,这时应该注意,sed的命令原型是:
sed -i "s/oldstring/goalstring/g" file
如果一个路径是data/path/abc,现在要将此路径换成一个字符串cde但是这时跟在s后边的其实是分隔符,用以将oldstring替换成cde;他可以使用任意字符,这时如果字符串中有“/”,就会发生混乱,在这个时候可以用#当做分隔符,就变成
sed -i "s#abc#cde#g" file
这时如果abc中包含“/”就可以随便替换了;
- 引号的替换:需要将引号转义,使用反斜杠“\”,比如替换" ' 'div' ' ",如果需要将它替换成‘div' ;可以使用sed -i s#\"\'\'#\'#g就能替换了。