文档首页> 互联网资讯> Linux sed文本处理实战

Linux sed文本处理实战

发布时间:2026-09-02 06:26       

linux sed

sed 是 Linux / Unix 系统中非常常用的文本处理工具,全称为 Stream Editor,即“流编辑器”。它主要用于对文本进行查找、替换、删除、插入、打印、提取等操作。相比直接打开文件编辑,sed 更适合批量处理日志、配置文件、代码文本以及大量重复性文本任务。

一、sed 的基本用法

sed 的常见语法如下:

sed [选项] '命令' 文件名

例如,查看文件内容:

sed '' example.txt

或者直接使用:

sed -n 'p' example.txt

其中 -n 表示不默认输出,p 表示打印匹配行。

如果不加 -nsed 默认会把每一行都输出一次,因此很多场景下需要配合 -n 使用。

二、打印指定行

查看第 5 行内容:

sed -n '5p' example.txt

查看第 5 到第 10 行:

sed -n '5,10p' example.txt

查看包含关键词的行:

sed -n '/error/p' log.txt

如果只想查看第一次出现的位置,可以使用:

sed -n '/error/{p;q;}' log.txt

这里的 q 表示退出处理。

三、文本替换

sed 最常见的功能是替换文本。

替换每行中第一个匹配的 old

sed 's/old/new/' example.txt

替换每行中所有匹配的 old

sed 's/old/new/g' example.txt

只替换第 2 个匹配项:

sed 's/old/new/2' example.txt

只处理包含 error 的行,并把其中的 warn 替换为 alert

sed '/error/s/warn/alert/g' log.txt

如果要直接修改原文件,需要加 -i

sed -i 's/old/new/g' example.txt

建议修改前先备份:

sed -i.bak 's/old/new/g' example.txt

这样会生成一个 example.txt.bak 备份文件。

四、删除指定行

删除第 3 行:

sed '3d' example.txt

删除第 5 到第 10 行:

sed '5,10d' example.txt

删除空行:

sed '/^$/d' example.txt

删除包含 debug 的行:

sed '/debug/d' log.txt

如果直接删除原文件中的内容:

sed -i '/debug/d' log.txt

五、插入和追加内容

在第 3 行前插入内容:

sed '3i\这是一行新内容' example.txt

在第 3 行后追加内容:

sed '3a\追加的新内容' example.txt

在匹配 server 的行前插入配置:

sed '/server/i\port=8080' config.txt

这些操作常用于批量生成配置文件或补充日志标记。

六、显示行号

sed 可以配合 = 显示行号:

sed '=' example.txt | sed 'N;s/\n/\t/'

查找关键词所在行号:

sed -n '/error/=' log.txt

如果要同时显示行号和对应内容,可以使用:

sed -n '/error/{=;p;}' log.txt

七、常用选项说明

选项 作用
-n 不自动输出
-i 直接修改原文件
-e 同时执行多个 sed 命令
-f 从脚本文件中读取 sed 命令
-r-E 使用扩展正则表达式

例如,同时执行删除空行和替换文本:

sed -e '/^$/d' -e 's/error/ERROR/g' log.txt

也可以写成:

sed -e '/^$/d; s/error/ERROR/g' log.txt

八、sed 与正则表达式

sed 的强大之处在于支持正则表达式。

匹配行首:

sed -n '/^start/p' file.txt

匹配行尾:

sed -n '/end$/p' file.txt

匹配任意字符:

sed -n '/log./p' file.txt

匹配数字:

sed -n '/[0-9]/p' file.txt

匹配多个连续数字:

sed -n '/[0-9][0-9]*/p' file.txt

使用扩展正则表达式时更简洁:

sed -n -E '/[0-9]+/p' file.txt

九、sed 的实际应用场景

1. 批量修改配置文件

例如把配置文件中的端口从 8080 改为 9000

sed -i 's/8080/9000/g' app.conf

2. 清理日志文件

删除空行:

sed '/^$/d' app.log

删除包含测试标记的行:

sed '/TEST/d' app.log

3. 提取关键信息

提取包含 ERROR 的日志:

sed -n '/ERROR/p' app.log

提取 IP 地址示例:

sed -n -E 's/.*([0-9]{1,3}(\.[0-9]{1,3}){3}).*/\1/p' access.log

4. 批量处理代码

例如把代码中的 console.log 替换为空:

sed -i 's/console\.log([^;]*);//g' app.js

十、使用 sed 的注意事项

  1. 使用 -i 修改文件前,建议先备份。
  2. 替换特殊字符时,需要注意转义,例如 /.$
  3. 如果文本中包含很多斜杠,可以更换分隔符:
sed 's|/usr/local|/opt|g' file.txt
  1. 复杂文本处理可以结合 grepawksort 等命令使用。
  2. 对重要文件执行批量替换前,最好先用不加 -i 的命令预览结果。

例如先预览:

sed 's/old/new/g' config.txt

确认无误后再修改:

sed -i 's/old/new/g' config.txt

总结

sed 是 Linux 中非常实用的文本处理工具,适合完成查找、替换、删除、插入、提取和批量修改等任务。它命令简洁、效率高,尤其适合处理日志文件、配置文件和大量文本数据。掌握 sed 的基础语法、常用选项以及正则表达式后,可以显著提升 Linux 系统管理和自动化运维的工作效率。