SED插入线在两个支架之间的第二个线上



我有一个带有以下信息的区域文件:

zone "example.com" {
    type master;
    file "master/example.com";
};
zone "example.org" {
    type master;
    file "master/example.org";
};

等等。我需要grep example.com 并在支架内添加三行。

我可以通过以下方式获得整个括号:

sed -n '/zone "example.com" {/,/};/p' zones.local

结果:

zone "example.com" {
        type master;
        file "master/example.com";
};

我需要添加以下三行,因此最终结果看起来像:

zone "example.com" {
        type master;
        file "master/example.com";
        key-directory "/etc/bind/keys/example.com";
        inline-signing yes;
        auto-dnssec maintain;
};
zone "example.org" {
        type master;
        file "master/example.org";
};

但是,无论我如何尝试,我都无法正常工作。例如,我尝试过:

sed -n '/zone "example.com" {/,/};/p; $i key-directory "/etc/bind/keys/example.com";' zones.local

,但这将添加到整个文件的第二行,而不是第一个正则结果的第二个结果。我可以让它以某种方式附加第一条正则态度?

我完全陷入困境,很高兴SOM帮助!

这可能对您有用(gnu sed):

sed '/^zone "example.com" {/{:a;h;n;/^};/!ba;x;s#S.*#key-directory "/etc/bind/keys/example.com";#p;s/S.*/inline-signing yes;/p;s/S.*/auto-dnssec maintain;/p;x}' file

专注于one "example.com" {};之间的文件行,所有其他行都将按照正常形式打印。

遇到启动zone "example.com" {的行时,使用h命令进行复制,然后打印当前行,然后使用n命令将其替换为下一条。

如果当前行未开始};,请重复直到进行直到进行,然后使用x命令复制到最后一行,并使用替代命令s将非间隔文本替换为线的末端,并使用需要新的文本并打印N.B.替代命令上的p标志。这保留了凹痕并有效地插入文本};

重复上述内容,以插入其余的新文本,最后将其交换回模式空间并打印出来。

相关内容

最新更新