You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在每个LOCATION-BLOCK后的首个IF-BLOCK前插入指定注释?

仅在Nginx Location块后的首个If块前插入注释的解决方案

需求是在Nginx配置文件中,仅在每个location块内的第一个if块之前插入注释##INSERT-A NEW-LINE-HERE,但常规的sed匹配所有if块的写法会给每个if都插入注释,无法满足仅处理首个if的要求。

正确的Sed命令

sed -i '
/location/{
    :loop
    N
    /{/!b loop
    s/\(.*\)/\1\n    flag=1/
}
/if ($http_referer/ {
    /flag=1/ {
        i\            ##INSERT-A NEW-LINE-HERE
        s/flag=1//
    }
}
' file.conf

命令逻辑说明

  1. 标记location块状态:当匹配到location开头的行时,进入循环读取后续内容,直到找到location块的开括号{,然后在该行末尾添加一个临时标记flag=1,表示当前处于需要处理首个if块的状态。
  2. 处理首个if块:当匹配到目标if ($http_referer行时,检查当前行上下文是否存在flag=1标记:
    • 若存在,就在该行前插入指定注释,同时移除flag=1标记,确保该location块内后续的if块不会再被处理。
    • 若不存在,直接跳过该if块。

执行该命令后,每个location块内只有第一个if块前会插入注释,后续的if块不会受影响,完全符合需求。

内容的提问来源于stack exchange,提问作者n1Ls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:55:30