Linux 三剑客之 sed 流编辑器

柳三千

文章最后更新时间:2025年06月11日

sed 文本处理工具完全指南

前言

sed 是 Linux 系统中强大的流编辑器(Stream EDitor),可对文本进行高效的查找、替换、删除、插入等操作,常用于处理文本文件或管道输出数据。

应用场景

  • 批量修改配置文件:快速修改大量配置文件中的特定参数,避免手动编辑。
  • 日志处理:提取日志信息、删除无用行或格式化内容。
  • 文本数据清洗:替换特定字符、删除不需要的字段。
  • 脚本自动化:在 Shell 脚本中实现文本处理任务。

核心选项:-i 直接修改文件

sed -i 可直接修改文件内容,无需重定向输出。注意:操作前建议备份文件,避免误改系统配置!

一、文本行添加(增)

1. 行后插入(a 命令)

# 在第4行后添加新行(输出到标准输出)
sed -e '4a/新添加一行' test  
sed -e '4a\新添加一行' test  # 推荐写法,避免斜杠冲突

# 直接修改文件(谨慎操作)
sed -i '4a\新添加一行' test  

2. 行前插入(i 命令)

# 在第4行前插入新行
sed '4i\新添加一行' test  

3. 多行添加

# 在第2行后添加两行(单引号包裹,反斜杠换行)
sed '2a Drink tea or ..... \
drink beer?' test  

二、文本行删除(删)

1. 删除指定行范围

# 删除第2-5行
nl test | sed '2,5d'  

# 删除第3行到最后一行
nl test | sed '3,$d'  

2. 删除包含特定字符的行

# 删除所有包含"oo"的行
nl test | sed '/oo/d'  

三、文本内容修改(改)

1. 覆盖整行(c 命令)

# 将第2-5行替换为"No number"
nl test | sed '2,5c No number'  

2. 字符串替换(s 命令)

# 将"oo"替换为"kk"(仅替换第一个匹配项)
sed 's/oo/kk/' test  

# 全局替换(所有匹配项)
sed 's/oo/kk/g' test  

3. 多点编辑(-e 选项)

# 同时执行删除和替换操作
sed -e '3,$d' -e 's/HELLO/RUNOOB/g' test  

四、文本内容查询(查)

1. 查找包含特定字符的行

# 查找包含"oo"的行并输出(-n 仅显示匹配行)
sed -n '/oo/p' test  

五、高级应用:数据查找与替换

1. 批量处理文件

# 将当前目录下所有以test开头的文件中的"oo"替换为"KK"
sed -i 's/oo/KK/g' test*  

2. 结合正则表达式提取数据

# 提取本机IP地址(排除回环地址)
ip add | grep 'inet ' | grep -v '127' | sed 's/inet.*//g' | sed 's/\/.*$//g'  

六、实用案例

1. 修改文件后缀

# 将所有.txt文件重命名为.md(通过sed生成命令)
ls *.txt | sed 's/.txt/.md/g' | xargs -i mv {} {}  

2. 配置文件参数修改

# 将httpd.conf中的80端口改为8080
sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf  

总结:sed 常用命令速查表

命令 作用 示例
a 行后插入 sed '4a\新行' file
i 行前插入 sed '4i\新行' file
d 删除行 sed '2,5d' file
c 覆盖整行 sed '2c\新内容' file
s 字符串替换 sed 's/old/new/g' file
-n 仅输出匹配行 sed -n '/pattern/p' file
-i 直接修改文件 sed -i 's/old/new/g' file
-e 多点编辑 sed -e 'cmd1' -e 'cmd2' file

通过 sed 可高效处理文本数据,结合正则表达式能应对复杂场景。建议在实际操作前先用测试文件演练,避免误操作导致数据丢失。

文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码