您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux如何使用GNU sed
## 一、sed简介
### 1.1 什么是sed
sed(Stream EDitor)是Linux/Unix系统中强大的**流式文本编辑器**,由Lee E. McMahon于1973年创建。作为GNU核心工具集的一部分,它以**非交互、逐行处理**的方式对文本进行编辑,特别适合:
- 自动化文本处理
- 批量替换内容
- 日志文件分析
- 数据格式转换
### 1.2 sed工作流程
```text
1. 读取输入流的一行到模式空间(Pattern Space)
2. 按顺序执行所有sed命令
3. 自动输出模式空间内容(除非使用-n选项)
4. 清空模式空间并处理下一行
sed [选项] '地址+命令' 文件名
选项 | 作用描述 |
---|---|
-n |
抑制自动输出 |
-e |
连接多个命令 |
-f |
指定脚本文件 |
-i |
直接修改文件 |
-r |
启用扩展正则 |
语法: s/pattern/replacement/flags
经典示例:
# 全局替换file.txt中的"old"为"new"
sed -i 's/old/new/g' file.txt
# 替换每行第2个匹配项
sed 's/old/new/2' file.txt
# 使用不同分隔符(适合处理路径)
sed 's|/usr/bin|/usr/local/bin|' paths.txt
# 删除空行
sed '/^$/d' file.txt
# 删除包含"debug"的行
sed '/debug/d' logfile
# 删除第5-10行
sed '5,10d' config.conf
# 在第3行前插入文本
sed '3i\插入的内容' file
# 在匹配行后追加
sed '/pattern/a\追加的内容' data.txt
# 处理第1-5行
sed '1,5s/foo/bar/' file
# 每隔2行处理一次
sed '1~2d' numbers.txt # 删除奇数行
# 组合替换和删除
sed -e 's/foo/bar/g' -e '/baz/d' file
# 使用分号分隔
sed 's/START//; s/END//; /^$/d' document
# 复制匹配行并追加(p命令)
sed -n '/error/{p;p}' server.log
# 保持空间(h/H/g/G命令)
sed '1h;1!H;$!d;g' file # 反转文件行顺序
# 跳过包含"ignore"的行
sed '/ignore/b end; s/pattern/replace/; :end' file
# 条件替换(仅当行包含"flag"时才替换)
sed '/flag/ s/old/new/' data
# 基础正则(默认)
sed 's/\(foo\)bar/\1baz/' file
# 扩展正则(-r或--regexp-extended)
sed -r 's/(foo)bar/\1baz/' file
字符 | 含义 |
---|---|
^ |
行首 |
$ |
行尾 |
. |
任意字符 |
\s |
空白字符 |
\S |
非空白字符 |
# 匹配HTML标签
sed -r 's/<[^>]+>//g' webpage.html
# 提取IP地址
sed -rn 's/.*([0-9]{1,3}\.){3}[0-9]{1,3}.*/\0/p' logfile
# 提取特定时间段的日志
sed -n '/2023-05-01 10:00/,/2023-05-01 11:00/p' access.log
# 统计错误出现次数
sed -n '/ERROR/p' app.log | wc -l
# 注释掉所有包含"debug"的行
sed -i '/debug/ s/^/#/' config.ini
# 取消注释SSH配置
sed -i '/^#Port 22/ s/^#//' /etc/ssh/sshd_config
# CSV文件处理(删除空列)
sed -r 's/,,/, ,/g;s/,,/, ,/g' data.csv
# 标准化日期格式
sed -r 's/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/\3-\2-\1/' dates.txt
# 只处理文件前1000行
sed '1000q' hugefile.log
# 使用更高效的正则
sed 's/.*//' # 避免贪婪匹配
场景 | sed方案 | 替代方案 |
---|---|---|
简单替换 | sed 's/old/new/' |
tr 'old' 'new' |
复杂转换 | sed脚本 | awk/perl |
多文件处理 | 配合find | perl -i |
sed -r 's/\<old\>/new/g' file # 使用单词边界
# BSD系统需要指定备份后缀
sed -i '' 's/pattern/replace/' file # MacOS示例
# 使用不同的分隔符
sed 's|/path/to/old|/new/path|' file
# 转义特殊字符
sed 's/\/old\/path/\/new\/path/' file
info sed
注意:所有示例测试前建议先使用不带
-i
选项的命令预览结果,确认无误后再实际修改文件。熟练掌握sed需要大量实践,建议在测试文件上反复练习各个命令组合。 “`
这篇文章包含了: 1. 从基础到进阶的完整知识体系 2. 大量可直接运行的实用示例 3. 表格形式的快速参考 4. 实际应用场景解决方案 5. 常见问题排查指南 6. 性能优化建议
可根据需要调整各部分内容的详细程度或增加具体案例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。