On Thu, Dec 6, 2012 at 3:48 PM, Craig White craig.white@ttiltd.com wrote:
not that I was looking for someone to write it for me but that works only when the nginx.conf looks like
server_name domain1.com domain2.com big.server.com;
which I actually didn't need to use awk to parse as I already handled those instances just fine with grep/sed
but I have some conf files which look like
server_name { domain1.com domain2.com big.server.com } ;
and that forced me into looking at alternative methods - hence awk
It's kind of hard to write a generic parser in regexps, but something like this in perl should catch most of the likely layouts:
while (<>) { chomp(); next if (m/^\s*#/); #comment if ($enclosed) { if (m/}/) {$enclosed = 0;} # end found tr/};//d; #remove push @servers, split(); #anything else on line next; } else { next unless m/server_name/; if (m/{/) { $enclosed = 1;} if (m/}/) {$enclosed = 0;} #on same line? s/server_name//; tr/{};//d ; push @servers,split(); } } foreach (sort(@servers)) { print "$_\n";}