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'

⚠️ 注意事项

  1. 转义特殊字符
    若需替换 /.等特殊字符,需用 \转义或更换分隔符:
    sed 's/\/path/\/new_path/g'  # 或使用其他分隔符如#
    sed 's#/path#/new_path#g'
    
  2. 避免覆盖原文件
    使用 -i前建议先测试命令,或通过 -i.bak生成备份。
  3. 多行处理限制
    Sed默认逐行处理,复杂多行操作建议改用 awk或 perl

总结

Sed凭借其简洁高效的文本处理能力,是Linux系统管理员和开发者的必备工具。掌握其核心语法(替换、删除、插入)、正则表达式、条件判断及多文件操作,可大幅提升文本处理效率。对于复杂场景,可结合 awkgrep等工具链实现更强大的功能。建议通过实际案例反复练习,逐步掌握进阶技巧。


label :
  • Linux
  • Sed