我试图使用脚本将主机名附加到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
。