Linux三剑客之sed

sed - 流编辑器

基本语法

sed [选项] '命令' [输入文件]

sed [选项] -f 脚本文件 [输入文件]

常用选项

-n # 只输出处理过的行

-e # 指定多个编辑命令

-f # 从文件读取sed脚本

-i # 直接修改源文件(危险但实用)

-i.bak # 修改前备份原文件

-r # 使用扩展正则表达式

sed命令详解

1. 替换命令 (s)

# 基本替换
sed 's/old/new/' file.txt # 每行第一次出现

sed 's/old/new/g' file.txt # 全局替换

sed 's/old/new/2' file.txt # 每行第二次出现

sed 's/old/new/ig' file.txt # 忽略大小写全局替换

# 使用不同分隔符
sed 's|/usr/local|/opt|g' file.txt # 使用|代替/

sed 's#/home/#/data/#g' file.txt # 使用#代替/

# 引用匹配内容
sed 's/\([0-9]\)\.\([0-9]\)/\2.\1/' file.txt # 交换数字

sed -r 's/([0-9])\.([0-9])/\2.\1/' file.txt # 扩展正则简化

2. 删除命令 (d)

sed '5d' file.txt # 删除第5行

sed '1,10d' file.txt # 删除1-10行

sed '/^#/d' file.txt # 删除注释行

sed '/^$/d' file.txt # 删除空行

sed '/^#/d; /^$/d' file.txt # 删除注释和空行

3. 打印命令 (p)

sed -n '1,5p' file.txt # 只打印1-5行

sed -n '/error/p' file.txt # 只打印包含error的行

sed -n '10,20p; 30,40p' file.txt # 打印多个范围

4. 插入/追加/更改 (i/a/c)

# 插入(在指定行前)
sed '2i\插入的内容' file.txt

sed '/pattern/i\插入的内容' file.txt

# 追加(在指定行后)
sed '2a\追加的内容' file.txt

sed '$a\文件末尾追加' file.txt

# 更改(整行替换)
sed '5c\新的第5行内容' file.txt

5. 转换命令 (y)

sed 'y/abc/ABC/' file.txt # 字符转换 a→A, b→B, c→C

高级用法

# 多个命令组合
sed -e 's/foo/bar/g' -e '/^#/d' file.txt

sed 's/foo/bar/g; /^#/d' file.txt

# 保存到变量
new_text=$(sed 's/old/new/g' file.txt)

# 处理范围
sed '/start/,/end/d' file.txt # 删除start到end之间的行

sed '/start/,/end/s/foo/bar/g' file.txt # 在范围内替换

# 保持空间操作(复杂编辑)
sed '1!G;h;$!d' file.txt # 反转文件行序

实用示例

# 配置文件处理
sed -i '/^#.*PasswordAuthentication/s/^#//' sshd_config # 取消注释

sed -i 's/^#\?Port.*/Port 2222/' sshd_config # 修改端口

# 日志处理
sed -n '/2023-10-01 14:/,/2023-10-01 15:/p' access.log # 提取时间范围

# 文本清理
sed 's/\s\+$//' file.txt # 删除行尾空格

sed 's/\t/ /g' file.txt # 制表符转空格

# CSV处理
sed 's/,/\t/g' data.csv > data.tsv # CSV转TSV

相关推荐
IMPYLH2 分钟前
Linux 的 comm 命令
linux·运维·算法
淡泊if4 分钟前
1.2GB → 98MB,我的 Docker 镜像瘦身实战记录
运维·docker·容器
Sst的头号粉丝7 分钟前
Docker——cgroups
运维·docker·容器
薛定谔的悦10 分钟前
嵌入式设备OTA升级实战:从MQTT命令到自动重启的全流程解析
linux·算法·ota·ems
于慨41 分钟前
tauri
java·服务器·前端
2501_918126911 小时前
学习所有6502写游戏控制器的语句
java·linux·网络·汇编·嵌入式硬件
JuckenBoy1 小时前
Linux环境安装SGLang框架运行自选大模型(以Rocky9.7为例)
linux·运维·大模型·qwen·rocky·deepseek·sglang
十巷无终1 小时前
Kali Virtual Machines(虚拟机镜像)安装后问题及解决办法
linux·运维·服务器
赵民勇1 小时前
gtkmm库之GtkWindow与ApplicationWindow用法详解
linux·c++
BestOrNothing_20151 小时前
(4)Ubuntu 22.04 安装后使用 GParted 重新分区实战记录
linux·gparted·ubuntu22.04·ubuntu磁盘分区