简介
sed(流编辑器)是一个强大的文本处理工具,它可以对输入流(文件或管道)执行基本的文本转换操作。本指南将帮助您掌握sed的各种用法,从基础替换到高级文本处理。
主要特点:
- 支持正则表达式
- 可以直接修改文件
- 支持复杂的文本替换和删除操作
- 可以处理多行文本
基本用法
基本语法
sed [选项] '命令' 文件
常用选项
选项 | 说明 | 示例 |
---|---|---|
-i | 直接修改文件 | sed -i 's/old/new/g' file.txt |
-e | 执行多个命令 | sed -e 's/a/A/' -e 's/b/B/' file.txt |
-n | 抑制自动打印 | sed -n 'p' file.txt |
基本命令
替换文本:
sed 's/old/new/' file.txt
删除行:
sed '/pattern/d' file.txt
打印特定行:
sed -n '1,5p' file.txt
高级特性
多行处理
处理多行模式:
sed '/start/,/end/s/old/new/g' file.txt
合并行:
sed ':a;N;$!ba;s/\n/ /g' file.txt
保持空间操作
使用保持空间:
sed 'H;1h;$!d;x;s/\n/,/g' file.txt
高级功能说明:
- N:将下一行加入到模式空间
- H:将模式空间追加到保持空间
- x:交换模式空间和保持空间
- D:删除模式空间第一行
实用案例
配置文件修改
修改配置值:
sed -i 's/^PORT=.*/PORT=8080/' config.conf
添加新配置:
sed -i '/^#END/i NEW_OPTION=value' config.conf
日志处理
提取特定时间段的日志:
sed -n '/2024-12-11 10:00/,/2024-12-11 11:00/p' access.log
删除调试信息:
sed '/DEBUG:/d' app.log
批量重命名
ls | sed 's/\.txt$/.bak/' | xargs -I {} mv {}.txt {}.bak
正则表达式
基本正则表达式
模式 | 说明 | 示例 |
---|---|---|
^ | 行首 | sed 's/^#//' |
$ | 行尾 | sed 's/$/;/' |
.* | 任意字符 | sed 's/foo.*/bar/' |
\(pattern\) | 分组 | sed 's/\(foo\)bar/\1/' |
注意:
在使用扩展正则表达式时,需要使用-E选项或在正则表达式中转义特殊字符。
最佳实践
安全性考虑
注意事项:
- 使用-i前先测试命令
- 处理重要文件时创建备份
- 注意正则表达式的转义
性能优化
优化建议:
- 使用-i时添加备份后缀
- 处理大文件时使用临时文件
- 合并多个sed命令减少文件读写
实用脚本
批量替换带备份:
sed -i.bak 's/old/new/g' *.txt
合并多个操作:
sed -i -e 's/foo/bar/g' -e 's/baz/qux/g' -e '/^#/d' file.txt