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

相关推荐
2401_8734794024 分钟前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
守城小轩32 分钟前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发
charlie1145141911 小时前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler011 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1131 小时前
Linux进程与线程编程详解
linux·c++
我星期八休息1 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
切糕师学AI2 小时前
深入解析 Zsh 与 Oh-My-Zsh:打造高效现代化终端
linux·终端·zsh
切糕师学AI3 小时前
Ubuntu 下 Git 完全使用指南
linux·git·ubuntu
草履虫君3 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
日取其半万世不竭3 小时前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器