Linux中一些Sed命令技巧介绍
IDC服务
Linux中一些Sed命令技巧介绍
2025-04-14 00:03
`-i`:直接修改原文件(需谨慎使用)。 * `-e`:允许同时执行多个命令。 ?️ 基础操作技巧 1. 文本替换(替换指定内容)
### ? **Sed基础语法与核心功能**
Sed(Stream Editor)是Linux/Unix系统中用于文本处理的流编辑器,支持行内替换、删除、插入等操作。基本语法:
```bash
sed [选项] '命令' 文件
```
#### **常用选项**
* `-n`:仅显示处理后的结果(抑制默认输出)。
* `-i`:直接修改原文件(需谨慎使用)。
* `-e`:允许同时执行多个命令。
?️ 基础操作技巧
1. 文本替换(替换指定内容)
# 将文件中所有"old"替换为"new"
sed 's/old/new/g' filename.txt
# 替换第二列内容(假设列间用空格分隔)
sed 's/\(.*\)old\(.*\)/\1new\2/' filename.txt
2. 删除特定行
# 删除包含"error"的行
sed '/error/d' filename.txt
# 删除第5行
sed '5d' filename.txt
3. 插入与追加文本
# 在匹配行后插入文本
sed '/pattern/a\New line content' filename.txt
# 在匹配行前插入文本
sed '/pattern/i\New line content' filename.txt
? 模式匹配与范围操作
1. 匹配多行内容
# 匹配包含"start"到"end"的行范围
sed -n '/start/,/end/p' filename.txt
2. 反向匹配(排除特定内容)
# 显示不包含"error"的行
sed '/error/!d' filename.txt
3. 正则表达式扩展
# 匹配以数字开头的行
sed '/^[0-9]/p' filename.txt
# 匹配邮箱格式(示例)
sed -n '/^[a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,4\}$/p' filename.txt
? 高级替换与条件判断
1. 分组捕获与引用
# 将"apple,banana"替换为"banana,apple"
sed 's/\(apple\),\(banana\)/\2,\1/' filename.txt
2. 条件执行(基于行号或内容)
# 仅对第3-5行执行替换
sed '3,5s/old/new/g' filename.txt
# 当匹配"success"时执行操作
sed '/success/{s/old/new/}' filename.txt
3. 多文件处理
# 合并多个文件并处理
sed -e 's/old/new/g' file1.txt file2.txt > merged.txt
? 原地编辑与备份
1. 直接修改文件
# 替换后直接保存到原文件
sed -i 's/old/new/g' filename.txt
# 保留备份(扩展名为.bak)
sed -i.bak 's/old/new/g' filename.txt
? 实战案例
案例1:格式化日志输出
# 提取时间、IP和状态码(假设日志格式:[time] IP - - "GET /path HTTP/1.1" status)
sed -n 's/\[\(....-..-.. ..:..\).*\] \([^ ]\+\).*"\([^ ]\+\)\/.*" \([0-9]\+\).*/\1,\2,\4/p' access.log
案例2:批量替换配置文件
# 将所有MySQL配置文件中的"localhost"替换为"192.168.1.100"
find /etc/ -name "*.conf" | xargs sed -i 's/localhost/192.168.1.100/g'
⚠️ 注意事项
- 转义特殊字符
若需替换 /
、.
等特殊字符,需用 \
转义或更换分隔符:
sed 's/\/path/\/new_path/g' # 或使用其他分隔符如#
sed 's#/path#/new_path#g'
- 避免覆盖原文件
使用 -i
前建议先测试命令,或通过 -i.bak
生成备份。
- 多行处理限制
Sed默认逐行处理,复杂多行操作建议改用 awk
或 perl
。
? 总结
Sed凭借其简洁高效的文本处理能力,是Linux系统管理员和开发者的必备工具。掌握其核心语法(替换、删除、插入)、正则表达式、条件判断及多文件操作,可大幅提升文本处理效率。对于复杂场景,可结合 awk
、grep
等工具链实现更强大的功能。建议通过实际案例反复练习,逐步掌握进阶技巧。
label :
- Linux
- Sed