Quote:
Originally Posted by fizzistuff
I was trying to do it in sed, and I'm not getting anywhere .. any help ?
|
I find it easier to perform this transformation in small steps.
1) Reformat the input file so each "<VirtualHost *:80>" block of lines becomes one line.
2) If any line lacks a ServerName, plug in the default.
3) Reformat the file to look like the original.
With this InFile ...
Code:
<VirtualHost *:80>
## could be comments
could be any line
could be any line
could be any line
</VirtualHost>
<VirtualHost *:80>
could be any line
## could be comments
could be any line
could be any line
could be any line
could be any line
could be any line
</VirtualHost>
<VirtualHost *:80>
## may have comments
ServerName ppp.com
could be any line
could be any line
could be any line
</VirtualHost>
<VirtualHost *:443>
## could be empty
could be any line
could be any line
ServerName zzz.com
could be any line
could be any line
could be any line
</VirtualHost>
... this code ...
Code:
sed 's/$/~/' $InFile \
|paste -d"\0 " -s \
|sed 's|</VirtualHost>~|</VirtualHost>\n|g' \
|awk '{if ($0~"<VirtualHost" && $0!~"ServerName")
sub(">",">~ ServerName ABC.COM")} {print}' \
|sed 's/~/\n/g' \
> $OutFile
...produced this OutFile ...
Code:
<VirtualHost *:80>
ServerName ABC.COM
## could be comments
could be any line
could be any line
could be any line
</VirtualHost>
<VirtualHost *:80>
ServerName ABC.COM
could be any line
## could be comments
could be any line
could be any line
could be any line
could be any line
could be any line
</VirtualHost>
<VirtualHost *:80>
## may have comments
ServerName ppp.com
could be any line
could be any line
could be any line
</VirtualHost>
<VirtualHost *:443>
## could be empty
could be any line
could be any line
ServerName zzz.com
could be any line
could be any line
could be any line
</VirtualHost>
Daniel B. Martin