Linux 运维中怎么使用 sed 实现多行模式匹配与复杂的配置文件重构

落伟同学_5237

落伟同学_5237

2026-09-22

166人浏览

原创

sed多行处理依赖模式空间与保持空间协作:h/h/x/g/g命令将多行累积至保持空间再统一处理,如提取server块或注释upstream段,但嵌套花括号需awk等更强大工具。

linux 运维中怎么使用 sed 实现多行模式匹配与复杂的配置文件重构

理解 sed 的多行模式空间机制

sed 默认逐行处理,但配置文件常需跨行匹配(比如从 server { 到对应 } 的整个块)。这时必须启用多行模式,核心是 H(追加到保持空间)、h(覆盖保持空间)、x(交换模式/保持空间)、g/G(取回保持空间内容)等命令。

关键点:保持空间(hold space)是 sed 的“暂存区”,不参与默认输出;模式空间(pattern space)才是当前处理行所在区域。多行操作本质是把多行累积进保持空间,再统一判断和处理。

提取或删除一个完整配置块(如 Nginx server 块)

以提取所有 server { ... } 块为例(支持嵌套花括号的简化场景):

sed -n '/^server {/{:a;N;/^}/!ba;s/\n[[:space:]]*/ /g;p;}' nginx.conf

说明:

  • -n 关闭自动打印,只输出匹配结果
  • /^server {/{...} 匹配开头行后进入分支
  • :a;N;/^}/!ba 循环追加下一行(N),直到遇到单独一行 } 才停止
  • s/\n[[:space:]]*/ /g 把换行及后续空格替换成单个空格(可选,便于阅读)
  • p 打印最终拼合的块

⚠️ 注意:该写法不处理花括号嵌套(如 if (...) { location { ... } }),真实复杂嵌套建议改用 awk 或专用工具(如 yq、jq 处理结构化配置)。

替换跨多行的配置段(如注释掉整个 upstream 块)

目标:将 upstream backend { ... } 整体替换为 #upstream backend { ... }(每行前加 #):

sed '/^upstream backend {/,/^}/ {s/^/#/;}' nginx.conf

Pandas 配置文件报告生成器
Pandas 配置文件报告生成器

使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。

下载

这是地址范围 + 命令组合的经典用法:/start/,/end/ 定义区间,大括号内对区间每行执行 s/^/#/

更安全的做法(避免误匹配):

  • /^upstream[[:space:]]\+backend[[:space:]]*{/,/^}/ 增强开头正则容错性
  • 若结尾可能带分号(如 };),可改为 /^}/ {s/^/#/;b}; s/^/#/ 配合跳转控制
  • 如需原地修改,加 -i 参数(先备份建议加 -i.bak

重构配置:动态插入、移动或条件合并段落

例如,在每个 location /api { 块末尾插入两行新配置:

sed '/^location \/api {/{:a;n;/^}/!ba;i\ proxy_set_header X-Real-IP $remote_addr;\ proxy_pass http://backend;\n;}' nginx.conf

说明:

  • n 读入下一行并进入模式空间
  • /^}/!ba 若不是 } 行,跳回 :a 继续读取
  • i\ 在匹配行(即 })之前插入文本(注意缩进与反斜杠换行)

其他实用技巧:

  • x + /pattern/g 实现“记住上文再匹配下文”的逻辑(如提取某参数值后,再修改其所在块的另一字段)
  • 结合 = 命令输出行号,辅助调试匹配范围
  • 对含变量或引号的配置,优先用单引号包裹 sed 脚本,避免 shell 解析干扰

不复杂但容易忽略。真正稳定的配置重构,往往需要先验证正则边界,再小范围测试,最后批量执行。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux 配置文件

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3590

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3133

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2173

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5190

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

4862

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

2913

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2425

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2639

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习