【Linux系列教程】sed工具
一、sed工具介绍
- 流编辑器
- 作用
- 编辑文本文件
- 工作原理
- 将文件逐行读入到模式空间(内存),在内存中对文件进行修改,修改完毕后,默认会把模式空间所有内容显示到屏幕上
默认情况下,不会修改
原文件
特点:逐行
处理文件
二、sed工具的使用
# sed [option] 'script' 文件名称
# sed [option] 'lineCMD' 文件名称
line 哪些行
line不写,表示对文件每一行进行操作
CMD 操作
1.常用写法
行号 10
起始行号,终止行号
5,10
5,+3
/正则表达式/ /^#/
/正则表达式/,/正则表达式/
d 删除整行
[root@localhost ~]# sed '/^\//d' /etc/fstab
[root@localhost ~]# netstat -antp | sed '1,2d'
p 显示整行
[root@localhost ~]# sed -n '/^#/p' /etc/fstab
-n 取消默认显示模式空间的内容
[root@localhost ~]# df -hT | sed -n '/^\/dev/p'
a \追加的内容
[root@localhost ~]# sed '$a \10.1.1.1 node01.linux.com' /etc/hosts
[root@localhost ~]# sed '$a \export JAVA_HOME=/opt/jdk' /etc/profile
i \插入的内容
[root@localhost ~]# sed 'i \172.16.10.1 www.linux.com' /etc/hosts
[root@localhost ~]# sed '/datadir/i \server_id=10\nlog_bin=master' /etc/my.cnf
c \替换的内容 整行替换
[root@localhost ~]# sed '/#Port/c \Port 55555' /etc/ssh/sshd_config
w 文件名 另存为
[root@localhost ~]# sed '/^#/w /tmp/test01' /etc/fstab
r 文件名 合并文件
[root@localhost ~]# sed '$r /etc/hosts' /etc/redhat-release
= 显示行号 统计行数
[root@localhost ~]# sed -n '$=' /etc/fstab
n 读取下一行
[root@localhost ~]# sed -n '{n;p}' /tmp/file01
[root@localhost ~]# sed -n '{p;n}' /tmp/file01
s/旧内容/新内容/[修饰符] 内容替换
文件查找替换
旧内容支持正则表达式
[root@localhost ~]# sed '/^UUID=/s/UUID/uuid/' /etc/fstab
[root@localhost ~]# sed '$s/4/8/' /etc/fstab
[root@localhost ~]# sed '$s/[0-9]/!/g' /etc/fstab
[root@localhost ~]# sed 's/[0-9]/!/g' /etc/fstab
[root@localhost ~]# sed '$s/\//?/g' /etc/fstab
[root@localhost ~]# sed '$s|/|?|g' /etc/fstab
反向引用
\1 \2 \3
依次表示引用正则表达式中第一个分组内容、第二个分组内容、依次类推
[root@localhost ~]# sed 's|\(l..e\)|\1r|' /tmp/file01
[root@localhost ~]# sed 's|l\(..e\)|L\1|' /tmp/file01
匹配所有旧内容
[root@localhost ~]# sed 's|l..e|&r|' /tmp/file01
2.常用参数
-n
取消显示模式空间的内容
-i
修改原文件
[root@localhost ~]# sed -i '/^$/d' /etc/fstab
-e 同时做多个修改
[root@localhost ~]# sed -e '/^#/d' -e '/UUID/d' /etc/fstab
-f 操作文件
[root@localhost ~]# cat /tmp/list
/^#/d
/UUID/d
[root@localhost ~]# sed -f /tmp/list /etc/fstab
-r 支持扩展正则表达式
[root@localhost ~]# sed -r 's|l(..e)|L\1|' /tmp/file01
–follow-symlinks 软链接文件
更改软连接文件的时候必须加上!!!
[root@localhost ~]# sed -ri --follow-symlinks '2d' /tmp/file01