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

相关推荐
Archy_Wang_14 小时前
LVS+KeepAlived+Nginx实现企业级业务高可靠部署的实战教程
运维·nginx·lvs
张文君6 小时前
docker使用代理拉取镜像
运维·docker·容器
ltl7 小时前
纠删码原理与存储效率
linux
ltl7 小时前
MinIO 原理和架构:机制、AGPL 与上游 archived 风险
linux
陌路207 小时前
Docker教程从入门到精通(0基础)
运维·docker·容器
林浩杨_7 小时前
linux搜索命令(grep+sed)
linux·命令模式
W.W.H.7 小时前
将驱动编译成模块并安装到rootfs
linux·物联网·wifi·rootfs·驱动
ltl7 小时前
io_uring 在生产环境翻车实录:内核 bug、资源泄漏和你不知道的限制
linux
ltl7 小时前
内存分配器擂台:jemalloc vs tcmalloc vs mimalloc vs glibc
linux
ltl7 小时前
Zero Copy 的肮脏秘密:在什么时候反而更慢
linux