连载中 7/20

sed:批量修改文件的流编辑器

2026-10-14 · 35 阅读 · 0 评论 · 0 赞

一句话理解 sed

sed = 流编辑器:逐行读入、按规则加工、输出结果。它最经典的用途是不打开文件就完成替换——一条命令顶得上一百次 vim。

$ echo "port=8080" | sed 's/8080/9090/'
port=9090

# 默认只替换每行第一处,加 g 替换整行所有
$ sed 's/foo/bar/g' app.conf     # 注意:此刻只输出到屏幕,文件没变

s/旧/新/ 就是核心语法,所有记忆成本都在这一个模式上。

-i 落盘:先预览再动手

$ sed -i 's/8080/9090/g' application.properties       # 真改文件
$ sed -i.bak 's/8080/9090/g' application.properties   # 真改,并留 application.properties.bak

铁律:去掉 -i 先跑一遍看输出,确认替换范围没错再加 -i;生产文件务必带 .bak。替换内容含 /(比如路径)时换个分隔符即可:sed 's|/usr/local|/opt/app|'。

按行号与正则定位

$ sed -n '10,20p' app.log         # 只打印 10~20 行(-n 关默认输出,p 打印)
$ sed -n '/ERROR/p' app.log       # 等价于 grep ERROR
$ sed '/^#/d' nginx.conf          # 删除 # 开头的注释行
$ sed '/^$/d' data.txt            # 删除空行
$ sed '3a listen 80;' nginx.conf  # 在第 3 行之后追加一行(a = append)

动作字母记四个就够:p 打印、d 删除、a 行后追加、i 行前插入。「清洗配置文件」的两板斧——去注释、去空行——就是上面两个 d。

实战:批量改 100 个配置文件的端口

# 第 1 步:先看会改到哪些文件(只找不改)
$ grep -rl "8080" /opt/app/conf/

# 第 2 步:确认列表无误,批量替换并留备份
$ grep -rl "8080" /opt/app/conf/ | xargs sed -i.bak 's/8080/9090/g'

# 第 3 步:复查替换结果
$ grep -rn "9090" /opt/app/conf/ | wc -l

grep -rl 找出含目标的文件列表,xargs 把列表交给 sed 批量执行——管道串三剑客的典型协奏,下一章就专门讲这条「流水线」的原理。

sed 与 vim 替换是亲戚

vim 里的 :%s/old/new/g 和 sed 的 s/old/new/g 语法几乎一致——vim 借的正是 sed 的表达式。区别只在:vim 改的是内存里的缓冲区,sed 直接改磁盘上的文件。三剑客到此集齐,下一篇讲它们的共同舞台:管道与重定向——Linux 的精髓全在组合。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#sed#流编辑器#批量替换#文本处理#配置修改

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞