sed文本编辑工具和 vi 不同,sed是行编辑器
sed工作原理
sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。
如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。
Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快
基本用法
格式:
sed [option]... 'script;script;...' [inputfile...]
常用选项:
选项 | 说明 |
---|---|
-n | 不输出模式空间内容到屏幕,即不自动打印 |
-e | 多点编辑 |
-f FILE | 从指定文件中读取编辑脚本 |
-r, -E | 使用扩展正则表达式 |
-i.bak | 备份文件并原处编辑 |
-s | 将多个文件视为独立文件,而不是单个连续的长文件流 |
说明:
-ir 不支持
-i -r 支持
-ri 支持
-ni 会清空文件
script格式:
'地址命令'
地址格式:
1. 不给地址:对全文进行处理
2. 单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
3. 地址范围:
#,# #从#行到第#行,3,6 从第3行到第6行
#,+# #从#行到+#行,3,+4 表示从3行到第7行
/pat1/,/pat2/
#,/pat/
/pat/,#
4. 步进:~
1~2 奇数行
2~2 偶数行
命令:
选项 | 说明 |
---|---|
p | 打印当前模式空间内容,追加到默认输出之后 |
Ip | 忽略大小写输出 |
d | 删除模式空间匹配的行,并立即启用下一轮循环 |
a [\]text |
在指定行后面追加文本,支持使用\n实现多行追加 |
i [\]text |
在行前面插入文本 |
c [\]text |
替换行为单行或多行文本 |
w file | 保存模式匹配的行至指定文件 |
r file | 读取指定文件的文本至模式空间中匹配到的行后 |
= | 为模式空间中的行打印行号 |
! | 模式空间中匹配行取反处理 |
q | 结束或退出sed |
查找替代
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
选项 | 说明 |
---|---|
g | 行内全局替换 |
p | 显示替换成功的行 |
w /PATH/FILE | 将替换成功的行保存至文件中 |
I,i | 忽略大小写 |
范例:
[07:34:28 root@sz-centos7 /home]# sed 'p' /etc/issue
\S
\S
Kernel \r on an \m
Kernel \r on an \m
[08:20:05 root@sz-centos7 /home]# sed -n 'p' /etc/issue
\S
Kernel \r on an \m
[08:20:34 roo