您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux的sed命令详解:从入门到精通
## 一、sed简介
`sed`(Stream EDitor)是Linux/Unix系统中强大的**流式文本编辑器**,它以行为单位处理文本,执行查找、替换、删除、插入等操作而不改变原始文件。与交互式编辑器(如vim)不同,sed通过脚本指令自动处理文本流,特别适合批量编辑和大文件处理。
### 核心特性
- **非交互式**:通过命令参数或脚本文件操作
- **流水线处理**:可无缝衔接其他命令(grep/awk等)
- **保持原文件**:默认输出到stdout,需`-i`参数才修改源文件
- **支持正则**:强大的模式匹配能力
## 二、基础语法结构
```bash
sed [选项] '地址范围/操作/修饰符' 文件名
选项 | 作用 |
---|---|
-n |
禁止默认输出,常与p 命令配合 |
-i |
直接修改文件内容(危险操作建议先备份) |
-e |
连接多个编辑命令 |
-f |
指定sed脚本文件 |
最常用的文本替换操作:
sed 's/old/new/' file.txt # 每行第一个匹配
sed 's/old/new/g' file.txt # 全局替换
sed 's/old/new/2' file.txt # 仅替换每行第2个匹配
sed 's/old/new/ig' file.txt # 忽略大小写并全局替换
当替换内容包含/
时,可使用其他分隔符:
sed 's|/usr/bin|/usr/local/bin|g'
sed '3d' file.txt # 删除第3行
sed '1,5d' file.txt # 删除1-5行
sed '/pattern/d' file.txt # 删除匹配行
sed '/^$/d' file.txt # 删除所有空行
sed -n '1,3p' file.txt # 仅打印1-3行
sed -n '/error/p' log.txt # 打印所有包含error的行
sed '2i\插入内容' file.txt # 在第2行前插入
sed '$a\追加内容' file.txt # 在最后一行后追加
sed '10,20s/old/new/' file.txt # 仅处理10-20行
sed '/start/,/end/d' file.txt # 删除两个模式间的所有行
sed '5,+3s/old/new/' file.txt # 从第5行开始的4行
sed -e 's/foo/bar/' -e '/baz/d' file.txt
使用&
引用匹配到的整个内容:
echo "123" | sed 's/[0-9]*/& &/' # 输出 "123 123"
通过\(\)
捕获分组,用\1
,\2
引用:
echo "hello world" | sed 's/\(hello\) \(world\)/\2 \1/'
# 输出 "world hello"
命令 | 作用 |
---|---|
h/H | 复制/追加模式空间到保持空间 |
g/G | 复制/追加保持空间到模式空间 |
x | 交换两个空间内容 |
示例(反转文件行序):
sed -n '1!G;h;$p' file.txt
# 提取nginx日志中所有404错误
sed -n '/ 404 /p' access.log
# 替换日期格式(MM/DD/YYYY => YYYY-MM-DD)
sed 's#\([0-9]\{2\}\)/\([0-9]\{2\}\)/\([0-9]\{4\}\)#\3-\1-\2#' dates.txt
# 注释掉配置文件中的某行
sed -i '/^OPTION/s/^/#/' config.ini
# 取消注释
sed -i '/^#OPTION/s/^#//' config.ini
# 删除C/C++代码中的注释(简易版)
sed -e 's/\/\/.*$//' -e 's/\/\*.*\*\///g' source.cpp
# 交换第2列和第3列
sed 's/\([^,]*\),\([^,]*\),\([^,]*\)/\1,\3,\2/' data.csv
备份习惯:使用-i
前建议:
sed -i.bak 's/old/new/' file.txt
特殊字符转义:
sed 's/\/path\/to\/dir/\/new\/path/' # 正确转义/
sed 's|/path/to/dir|/new/path|' # 更推荐换分隔符
行尾问题:Windows文件需先转换:
dos2unix file.txt
性能优化:
-i
,可重定向到新文件-f
参数)特性 | sed | awk |
---|---|---|
设计目的 | 文本替换/编辑 | 文本分析/报告生成 |
处理单位 | 行 | 行+字段 |
编程能力 | 有限 | 完整编程语言(变量/循环等) |
适用场景 | 简单替换、批量编辑 | 复杂格式转换、数据统计 |
组合使用示例:
# 统计日志中每个IP出现的次数
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log |
sed 's/^ *//;s/ *$//' |
awk '{count[$1]++} END{for(ip in count) print ip,count[ip]}'
官方文档:
info sed # 详细手册
推荐书籍:
在线练习:
掌握sed需要不断实践,建议在日常工作中遇到文本处理任务时,优先考虑用sed解决,逐步积累经验。记住:任何需要手动重复编辑的操作,都应该尝试用sed自动化! “`
这篇文章共计约2100字,采用Markdown格式编写,包含: 1. 多级标题结构 2. 代码块与表格展示 3. 实际应用案例 4. 注意事项提示 5. 扩展学习资源 可根据需要调整内容细节或添加更多示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。