Linux sed文本处理实战
Linux sed文本处理实战
2026-09-02 06:26
sed是Linux流编辑器,擅长文本查找、替换、删除、插入和提取。
linux sed
sed是 Linux / Unix 系统中非常常用的文本处理工具,全称为 Stream Editor,即“流编辑器”。它主要用于对文本进行查找、替换、删除、插入、打印、提取等操作。相比直接打开文件编辑,sed更适合批量处理日志、配置文件、代码文本以及大量重复性文本任务。一、sed 的基本用法
sed的常见语法如下:sed [选项] '命令' 文件名例如,查看文件内容:
sed '' example.txt或者直接使用:
sed -n 'p' example.txt其中
-n表示不默认输出,p表示打印匹配行。如果不加
-n,sed默认会把每一行都输出一次,因此很多场景下需要配合-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 的注意事项
- 使用
-i修改文件前,建议先备份。 - 替换特殊字符时,需要注意转义,例如
/、.、$。 - 如果文本中包含很多斜杠,可以更换分隔符:
sed 's|/usr/local|/opt|g' file.txt
- 复杂文本处理可以结合
grep、awk、sort等命令使用。 - 对重要文件执行批量替换前,最好先用不加
-i的命令预览结果。
例如先预览:
sed 's/old/new/g' config.txt
确认无误后再修改:
sed -i 's/old/new/g' config.txt
总结
sed 是 Linux 中非常实用的文本处理工具,适合完成查找、替换、删除、插入、提取和批量修改等任务。它命令简洁、效率高,尤其适合处理日志文件、配置文件和大量文本数据。掌握 sed 的基础语法、常用选项以及正则表达式后,可以显著提升 Linux 系统管理和自动化运维的工作效率。