sed是什么
sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,不断重复,直到文件末尾。文件内容不会改变,除非使用重定向输出。
使用方法
1 | sed [option] 'command' filename |
常用option:
-n 或–quiet或–silent 仅显示script处理后的结果.
-e ‘脚本’或–expression=脚本 以选项中指定的script来处理输入的文本文件。
-f <script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-r 让sed命令支持扩展的正则表达式(默认是基础正则表达式)。
动作说明:
a: 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)。
c: 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。
d: 删除
i: 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)。
p: 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s: 取代,可以直接进行取代的工作。通常这个 s 的动作可以搭配正则表达式
常用命令
插入
1
2
3
4
5
6
7# 在第一行前添加字符串
sed '1i\添加的内容' file
# 在最后一行行前添加字符串
sed '$i\添加的内容' file
# 在最后一行行后添加字符串
sed '$a\添加的内容' file替换
1
2
3
4
5
6
7# 注释掉含有“swap”的行
sed -i 's/^[^#].*swap*/#&/g' fstab
# 取消含有字符串swap的行最前面的注释符号#
## //两杠表示空格,以空格替换#,等价取消#。
sed -i '/^#.*swap/s/^#//g' fstab删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 删除第2行
sed '2d' filename
# 删除1-4行
sed '1,4d' filename
# 删除1行和后2行,共3行
sed '1,+2d' filename
# 删除匹配到Coder的行和其后面的2行
sed '/Coder/,+2d' filename
# 删除奇数行
sed '1~2d' filename
# 删除偶数行
sed '2~2d' filename
# 删除匹配Coder的行
sed '/Coder/d' filename
# 删除所有空行
sed '/^$/d' filename