这可能是一个困难的问题。
我需要一种通过bash脚本为Apache2配置文件添加别名的方法。
我已经征服了检查别名是否已经在另一个配置文件中使用grep。我现在面临的问题是如何添加' ServerAlias testing.com'到配置文件。
每个配置文件都有两个用于端口80和端口443的虚拟主机。
我需要添加字符串' ServerAlias testing.com'在' ServerName'之后的下一行的每个配置但忽略以#或;。开头的任何行。
示例:
<VirtualHost *:80>
# A comment with ServerName in it <-- must be ignored
ServerName test.com
<<ADD STRING HERE>>
</VirtualHost>
<VirtualHost *:443>
ServerName test.com
<<AND HERE>>
</VirtualHost>
任何帮助都将不胜感激。
编辑: 注释必须被忽略,因为apache上的默认配置包含我希望保留的注释,而这些注释中的注释是&#39; ServerName&#39;必须忽略的,只有一个&#39; ServerName&#39;每个虚拟主机。
虚拟主机标记对我来说无关紧要,只要我可以忽略这些注释并在每个虚拟主机配置中ServerAlias testing.com
之后的行上添加ServerName
。
这需要对配置进行编辑,然后保存文件
答案 0 :(得分:0)
尝试关注并告诉我这是否对您有所帮助。
awk '/<\/VirtualHost>/{a=""} /VirtualHost/{a=1} a && $1~/ServerName/ && $2 ~ /test.com/{print $0 RS " ServerAlias " s1 "testing.com" s1;next} 1 ' s1="'" Input_file
EDIT1:由于OP想要忽略评论并将其保存到Input_file本身,请尝试关注。
awk '/^#/{next} /<\/VirtualHost>/{a=""} /VirtualHost/{a=1} a && $1~/ServerName/ && $2 ~ /test.com/{print $0 RS " ServerAlias " s1 "testing.com" s1;next} 1 ' s1="'" Input_file > temp && mv temp Input_file
答案 1 :(得分:0)
sed '/<VirtualHost \*:\(80\|443\)>/{
:a;
n;
/<\/VirtualHost>/!{
/^\(\s*#.*\|\s*\)$/ba;
s/\(\s*\)ServerName test.com/&\n\1ServerAlias testing.com/;
ba;
};
}' <input_file_path
答案 2 :(得分:0)
validate
请注意,它使用前一行中存在的任何缩进来缩进新字符串。
答案 3 :(得分:0)
另一个 awk 方法:
awk '/^ *ServerName test.com/{s=substr($0,1,index($0,"S")-1)"ServerAlias testing.com";
printf "%s\n%s\n", $0,s; next }1' file
输出:
<VirtualHost *:80>
# A comment with ServerName in it <-- must be ignored
ServerName test.com
ServerAlias testing.com
</VirtualHost>
<VirtualHost *:443>
ServerName test.com
ServerAlias testing.com
</VirtualHost>
其他 sed 方法:
sed -i 's/^\( *\)\(ServerName test.com\)/\1\2\n\1ServerAlias testing.com/' file