优化sed / tr shell脚本

时间:2012-09-12 20:37:26

标签: apache shell sed tr

我编写了一个脚本来自动将ServerAlias添加到Apache配置文件中,然后重新启动Apache,对sedtr有一个相当补救的理解,并且通常可能是shell脚本。这就是我想出的:

cp /etc/httpd/sites/site.conf tmphost &&
sed s/ServerName\ site.com/ServerName\ site.com^#ServerAlias\ sub.site.com/ \
        tmphost |
    tr '^#' '\n\t' >/etc/httpd/sites/site.conf &&
rm -f tmphost &&
apachectl restart

基本上我正在创建一个副本,用自己替换ServerName行+新别名,使用tr放入换行符和标签(sed对此有点奇怪?),覆盖旧的配置文件,删除副本,然后重新启动Apache。

它有效,但如果你知道我的意思,那真的不会让妈妈感到骄傲。关于如何清理它的任何想法?

2 个答案:

答案 0 :(得分:3)

如果要在ServerName行之后添加ServerAlias行,为什么不使用'append'命令添加一行:

sed '/ServerName site.com/a\
    ServerAlias sub.site.com' tmphost >/etc/httpd/sites/site.conf

在额外线的开头有一个'标签',你似乎需要它。

如果你有GNU sed,你可以使用-i选项进行就地编辑而不使用临时文件(但如果你正在编辑的文件有-i选项,则不要使用trap "rm -f tmphost; exit 1" 0 1 2 3 13 15 ...script manipulating tmphost... rm -f tmphost trap 0 选项多个硬链接,如果它是符号链接,也可能不是;请参阅以下William Pursell中的评论。

请注意,您应该将代码包装在:

{{1}}

如果shell因信号退出,则不会留下临时文件。当然,如果你有一个就地改变,你根本不需要临时文件。

答案 1 :(得分:0)

我喜欢使用sed直接添加ServerAilas的方式:

sed -i "0,/^ServerName.\+/s//\0\nServerAlias sub.site.com/" /etc/httpd/sites/site.conf
apachectl reload