sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;
语法:
sed [options] ‘[command]’ [filename]
options:
-n 抑制自动(默认的) 输出 *** 读取下一个输入行
-e 执行多个sed指令
-f 运行脚本
-i 编辑文件内容 ***
-i.bak 编辑的同时创造.bak的备份
-r 使用扩展的正则表达式 ***
command:
a 在匹配后追加 ***
i 在匹配后插入 ***
p 打印 ***
d 删除 ***
r/R 读取文件/一行
w 另存
s 查找
c 替换
y 替换
h/H 复制拷贝/追加模式空间(缓冲区)到存放空间
g/G 粘贴 从存放空间取回/追加到模式空间
x 两个空间内容的交换
n/N 拷贝/追加下一行内容到当前
D 删除\n之前的内容
P 打印\n之前的内容
b 无条件跳转
t 满足匹配后的跳转
T 不满足匹配时跳转
例子:
1.显示文件第三行
[root@xuegod63 tmp]# sed -n '3p' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.显示文件前三行
[root@xuegod63 tmp]# sed -n '1,3p' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
3.显示文件除前三行之外的全部内容
[root@xuegod63 tmp]# sed -n '1,3!p' passwd
4.显示文件第三行和之后的三行
[root@xuegod63 tmp]# sed -n '3,+3p' passwd
在文件头插入“###”
[root@xuegod63 tmp]# sed '1i###' passwd > a.txt
在文件尾插入"@@@"
[root@xuegod63 tmp]# sed '$a@@@' passwd > a.txt
把文件第三行替换成“$$$”
[root@xuegod63 tmp]# sed '3c$$$' passwd
复制粘贴
把文件的第二行到第四行复制到文件的末尾
[root@xuegod63 tmp]# sed '2,4H;$G' passwd > b.txt
h/H 复制拷贝/追加模式空间(缓冲区)到存放空间
g/G 粘贴 从存放空间取回/追加到模式空间
sed中的正则:
^ $ . *
例子:
1.删除空行 d 删除 ***
[root@xuegod63 tmp]# sed '/^$/d' passwd > c.txt
把fstab中包含ext4的记录(行)写入新的文件中
[root@xuegod63 tmp]# sed '/ext4/w newfstab2' /etc/fstab