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

相关推荐
Lsir10110_2 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
Sheffield2 小时前
command和shell模块到底区别在哪?
linux·云计算·ansible
历程里程碑2 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴2 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
承渊政道3 小时前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
技术路上的探险家3 小时前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker
代码AC不AC3 小时前
【Linux】深入理解缓冲区
linux·缓冲区·标准错误
Doro再努力3 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
全栈工程师修炼指南3 小时前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp
Lsir10110_3 小时前
【Linux】进程信号(上半)
linux·运维·服务器