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

使用sed添加行失败求助:为指定域名在also-notify后插入内容

问题分析与解决方案

你的sed命令无效主要有两个核心问题,咱们一个个拆解清楚:

1. 正则表达式不兼容sed的语法

sed默认使用基础正则表达式(BRE),而你用的.*?是Perl兼容正则(PCRE)里的非贪婪匹配语法,sed的BRE完全不支持这个写法!

在sed中,?会被当作字面字符处理,所以你的正则/"example\.net".*?also-notify.*?};/实际上是在找包含"example.net"、.*(贪婪匹配任意字符)、字面量?、also-notify、再.*、字面量?、};的行,这显然和你的目标行不匹配,自然不会触发后续的追加操作。

2. a命令的语法错误

sed的追加命令a的正确格式是:

  • POSIX标准sed:a\ 后跟换行,再写要追加的内容
  • GNU sed(大部分Linux系统默认的sed):可以简化成a 要追加的内容

而你写的a\nxxxxxxx/s里,/s是完全多余的,这不是sed的合法语法,即使正则匹配成功,这个错误的语法也会导致命令执行失败。


修正后的命令

方案1:兼容POSIX标准的写法(适用于所有sed版本)

sed '/"example\.net"[^}]*also-notify[^}]*};/a\
xxxxxxx' named.conf.local

这里用[^}]*替代.*,避免贪婪匹配到其他zone的内容(因为你的zone配置是单行的,[^}]*只会匹配到当前zone的}之前的内容,匹配更精准)。

方案2:GNU sed简化写法(Linux系统常用)

sed '/"example\.net"[^}]*also-notify[^}]*};/a xxxxxxx' named.conf.local

如果你的目标是追加新的also-notify条目,比如also-notify { z.z.z.z; };,可以直接把内容写进去:

sed '/"example\.net"[^}]*also-notify[^}]*};/a\
also-notify { z.z.z.z; }; ' named.conf.local

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:33