【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