我试图使用脚本将主机名附加到sudoers文件中特定主机别名字段的多行条目的末尾。
当前sudoers文件的条目类似于:

Host_Alias  srv_linuxestate= \
            host10,host12,host13,host1,host50,\
            host16,host1,host2,host11,host15,host21,\
            host3,host14

我需要的输出如下所示,其中我添加了“host25”
Host_Alias  srv_linuxestate= \
            host10,host12,host13,host1,host50,\
            host16,host1,host2,host11,host15,host21,\
            host3,host14,host25

这一段前后有更多的线条。
主机的值可能会更改,但不是固定的。此外,上面可能还有更多的行,这些行在不完整行的末尾使用“\”分隔。
任何帮助/指示都很好。

最佳答案

这里有一个sed版本:

/^Host_Alias/{                  # whenever we match Host_Alias at line start
:
/\\$/{N;b}                      # if backslash, append next line and repeat
s/$/,host25/                    # add the new host to end of line
}

如果只需要将新主机添加到其中一个主机别名中,请调整第一个匹配项以适应需要。在您的示例中,如果可能有制表符而不是空格,则应该是/^Host_Alias *srv_linuxestate=/,或者/^Host_Alias[ \t][ \t]*srv_linuxestate=/
如果你需要它作为一个一行,那就变成sed -i -e '/^Host_Alias[ \t][ \t]*srv_linuxestate=/{;:;/\\$/{N;b};s/$/,host25/;}' /etc/sudoers

09-04 01:23