Modifier un fichier avec AWK, SED etc...
Résolu
pcsystemd
Messages postés
734
Statut
Membre
-
zipe31 Messages postés 38797 Statut Contributeur -
zipe31 Messages postés 38797 Statut Contributeur -
Bonjour,
J'ai un fichier qui contient tous les virtualhost de mon serveur apache2 comme ci-dessous :
j'ai besoin d'ajouter pour chaque virtualhost les lignes suivantes :
Pour que chacun de mes virtualhost ressemble a ceci :
Serait il possible de faire cela en masse en utilisant AWK,SEd ou autre et si oui comment procéder?
Merci d'avance
J'ai un fichier qui contient tous les virtualhost de mon serveur apache2 comme ci-dessous :
<VirtualHost 0.0.0.0:80>
ServerName www.mondomaine.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user titi 7575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://domaine/toto
ProxyPassReverse / http://domaine/toto
</VirtualHost>
<VirtualHost 0.0.0.0:80>
ServerName www.mondomaine2.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine2
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tutu 7565 71
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://domaine/tata
ProxyPassReverse / http://domaine/tata
</VirtualHost>
j'ai besoin d'ajouter pour chaque virtualhost les lignes suivantes :
ServerAlias mondomaine.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mondomaine\.com
RewriteRule ^(.*)$ http://www.mondomaine.com$1 [R=permanent,L]
Pour que chacun de mes virtualhost ressemble a ceci :
<VirtualHost 0.0.0.0:80>
ServerName www.mondomaine2.com
ServerAlias mondomaine.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine2
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tutu 7565 71
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mondomaine\.com
RewriteRule ^(.*)$ http://www.mondomaine.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://domaine/tata
ProxyPassReverse / http://domaine/tata
</VirtualHost>
Serait il possible de faire cela en masse en utilisant AWK,SEd ou autre et si oui comment procéder?
Merci d'avance
A voir également:
- Modifier un fichier avec AWK, SED etc...
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Modifier dns - Guide
- Comment ouvrir un fichier epub ? - Guide
- Modifier extension fichier - Guide
8 réponses
Effectivement il y avait quelques caractères non-imprimables (une tab en plus et un espace en moins) dans ton fichier.
Ceci devrait aller mieux :
Ceci devrait aller mieux :
sed '\|<VirtualHost|,\|</VirtualHost>|{
/ServerName/{
h
s/.* www\.//
x
G
s/\n/&\tServerAlias /
}
/^\t$/{
s//&\n\tRewriteEngine On\n\tRewriteCond %{HTTP_HOST} ^/
G
s/\^\n/^/
s/$/\n\tRewriteRule ^(.*)$ http:\/\/www./
G
s/\.\n/./
s/\.\(.\{2,3\}\) *$/\\.\1\$1 [R=permanent,L\n/
}
}
'
\|<VirtualHost|,\|</VirtualHost>|{
On définit une plage d'adresses sur laquelle seront appliquée les commandes qui sont entre les accolades
/ServerName/{
Si la ligne contient le motif on applique les commandes entre accolades
h
On copie le contenu de la mémoire principale dans la mémoire annexe en écrasant son contenu. La mémoire principale contient toujours le motif
s/.* www\.//
On supprime de la mémoire principale le début du motif afin de ne garder que le nom de domaine
x
On échange le contenu des 2 mémoires, de ce fait la mémoire annexe contient désormais le nom de domaine
G
On ajoute au contenu de la mémoire principale le contenu de la mémoire annexe.
Le contenu ressemble à "\tServerName www.pcsystemd.com\npcsystemd.com"
s/\n/&\tServerAlias /
Donc on substitue le saut de ligne (\n) par lui même (&) suivi d'une tabulation (\t) et de "ServerAlias "
}
Fin des commandes concernant le motif "/ServerName/"
/^\t$/{
Si une ligne correspond au motif
s//&\n\tRewriteEngine On\n\tRewriteCond %{HTTP_HOST} ^/
On la substitue par elle même (&) en rajoutant ce qu'il faut derrière.
Ici on ne reprends pas le motif dans la commande de substitution vu qu'il correspond au motif recherché. On se contente de mettre '//' qui indique qu'on veut utiliser le même motif que précédemment.
G
On ajoute à nouveau le contenu de la mémoire annexe qui contient toujours le nom de domaine
s/\^\n/^/
On supprime le saut de ligne généré par l'ajout.
s/$/\n\tRewriteRule ^(.*)$ http:\/\/www./
On rajoute en fin de ligne ($) ce qu'on veut inscrire
G
On ajoute à nouveau le contenu de la mémoire annexe
s/\.\n/./
On supprime à nouveau le retour à la ligne tout en conservant le point de "www."
s/\.\(.\{2,3\}\) *$/\\.\1\$1 [R=permanent,L\n/
Ici on substitue le "." de ton domaine suivi de 2 ou 3 caractères (comme .com ou .fr) par lui même mais protégé (\\.) et on y ajoute le texte désiré.
}
Fin des commandes concernant le motif "/^\t$/
}
Fin des commandes concernant l'adressage.
On définit une plage d'adresses sur laquelle seront appliquée les commandes qui sont entre les accolades
/ServerName/{
Si la ligne contient le motif on applique les commandes entre accolades
h
On copie le contenu de la mémoire principale dans la mémoire annexe en écrasant son contenu. La mémoire principale contient toujours le motif
s/.* www\.//
On supprime de la mémoire principale le début du motif afin de ne garder que le nom de domaine
x
On échange le contenu des 2 mémoires, de ce fait la mémoire annexe contient désormais le nom de domaine
G
On ajoute au contenu de la mémoire principale le contenu de la mémoire annexe.
Le contenu ressemble à "\tServerName www.pcsystemd.com\npcsystemd.com"
s/\n/&\tServerAlias /
Donc on substitue le saut de ligne (\n) par lui même (&) suivi d'une tabulation (\t) et de "ServerAlias "
}
Fin des commandes concernant le motif "/ServerName/"
/^\t$/{
Si une ligne correspond au motif
s//&\n\tRewriteEngine On\n\tRewriteCond %{HTTP_HOST} ^/
On la substitue par elle même (&) en rajoutant ce qu'il faut derrière.
Ici on ne reprends pas le motif dans la commande de substitution vu qu'il correspond au motif recherché. On se contente de mettre '//' qui indique qu'on veut utiliser le même motif que précédemment.
G
On ajoute à nouveau le contenu de la mémoire annexe qui contient toujours le nom de domaine
s/\^\n/^/
On supprime le saut de ligne généré par l'ajout.
s/$/\n\tRewriteRule ^(.*)$ http:\/\/www./
On rajoute en fin de ligne ($) ce qu'on veut inscrire
G
On ajoute à nouveau le contenu de la mémoire annexe
s/\.\n/./
On supprime à nouveau le retour à la ligne tout en conservant le point de "www."
s/\.\(.\{2,3\}\) *$/\\.\1\$1 [R=permanent,L\n/
Ici on substitue le "." de ton domaine suivi de 2 ou 3 caractères (comme .com ou .fr) par lui même mais protégé (\\.) et on y ajoute le texte désiré.
}
Fin des commandes concernant le motif "/^\t$/
}
Fin des commandes concernant l'adressage.
Salut,
;-))
$ sed '\|<VirtualHost|,\|</VirtualHost>|{
/ServerName/{a\
\tServerAlias mondomaine.com
}
/^$/{a\
\tRewriteEngine On\
\tRewriteCond %{HTTP_HOST} ^mondomaine.com\
\tRewriteRule ^(.*)$ http://www.mondomaine\\.com$1 [R=permanent,L\
}
}
' plop
<VirtualHost 0.0.0.0:80>
ServerName www.mondomaine.com
ServerAlias mondomaine.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user titi 7575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mondomaine.com
RewriteRule ^(.*)$ http://www.mondomaine\.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://domaine/toto
ProxyPassReverse / http://domaine/toto
</VirtualHost>
<VirtualHost 0.0.0.0:80>
ServerName www.mondomaine2.com
ServerAlias mondomaine.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine2
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tutu 7565 71
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mondomaine.com
RewriteRule ^(.*)$ http://www.mondomaine\.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://domaine/tata
ProxyPassReverse / http://domaine/tata
</VirtualHost>
$
;-))
Merci zipe mais ce n'est pas bon puisque chaque virtualhost a un nom de domaine différent donc un ServerName diffèrent la est la difficulté si non bien sur ce serait simple. Dans mon exemple j'ai mondomaine.com et mondomaine2.com et ainsi de suite.. La difficulté c'est de pouvoir récupérer chaque valeur présente dans ServerName sans les www.
L'accès au savoir est la première liberté que chaque homme devrait avoir.
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Premier exemple :
Avant :
Après :
Second exemple :
Avant :
Après:
Etc...
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Avant :
<VirtualHost 0.0.0.0:80>
ServerName www.pcsystemd.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user titi 7575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://pcsystemd/toto
ProxyPassReverse / http://pcsystemd/toto
</VirtualHost>
Après :
<VirtualHost 0.0.0.0:80>
ServerName www.pcsystemd.com
ServerAlias pcsystemd.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=pcsystemd
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tutu 7565 71
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^pcsystemd.com
RewriteRule ^(.*)$ http://www.pcsystemd\.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://pcsystemd/tata
ProxyPassReverse / http://pcsystemd/tata
</VirtualHost>
Second exemple :
Avant :
<VirtualHost 0.0.0.0:80>
ServerName www.avenger.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=avenger
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tiuy 4575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://avenger/totio
ProxyPassReverse / http://avenger/totio
</VirtualHost>
Après:
<VirtualHost 0.0.0.0:80>
ServerName www.avenger.com
ServerAlias avenger.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=avenger
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tiuy 4575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^avenger.com
RewriteRule ^(.*)$ http://www.avenger\.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://avenger/totio
ProxyPassReverse / http://avenger/totio
</VirtualHost>
Etc...
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
En partant sur un fichier contenant tes 2 exemples ;-))
$ sed '\|<VirtualHost|,\|</VirtualHost>|{
/ServerName/{
h
s/.* www\.//
x
G
s/\n/&\tServerAlias /
}
/^$/{
s//&\n\tRewriteEngine On\n\tRewriteCond %{HTTP_HOST} ^/
G
s/\^\n/^/
s/$/\n\tRewriteRule ^(.*)$ http:\/\/www./
G
s/\.\n/./
s/\.\(.\{2,3\}\) *$/\\.\1\$1 [R=permanent,L\n/
}
}
' plop
<VirtualHost 0.0.0.0:80>
ServerName www.pcsystemd.com
ServerAlias pcsystemd.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=mondomaine
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user titi 7575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^pcsystemd.com
RewriteRule ^(.*)$ http://www.pcsystemd\.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://pcsystemd/toto
ProxyPassReverse / http://pcsystemd/toto
</VirtualHost>
<VirtualHost 0.0.0.0:80>
ServerName www.avenger.com
ServerAlias avenger.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robots.txt
Alias /favicon.ico /favicon.ico
RedirectMatch ^/st /cgi-bin/awstats.pl?config=avenger
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Acc<E8>s restreint"
require user tiuy 4575 78
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
Alias /awstats-icon /icon
RewriteEngine On
RewriteCond %{HTTP_HOST} ^avenger.com
RewriteRule ^(.*)$ http://www.avenger\.com$1 [R=permanent,L
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://avenger/totio
ProxyPassReverse / http://avenger/totio
</VirtualHost>
$
Bonjour zipe31 et merci. Je suis désolé mais cela ne fonctionne pas mais je penses que c'est m'on entiére faute car tu as adapté je penses ton script sed au nombre de lignes qui sont présentes dans mes virtualhosts hors mes virtualhosts ont plus de lignes par défaut donc je te donne deux exemples qui sont complets cette fois.
Pourrais tu adapter ton script SED au deux virtualhosts suivants?
Merci encore
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Pourrais tu adapter ton script SED au deux virtualhosts suivants?
Merci encore
<VirtualHost 0.0.0.0:80>
ServerName www.pcsystemd.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robot.txt
Alias /favicon.ico /favicon1.ico
Alias /googlebac4cfb1.html /html/googlebac4c692fb1.html
RedirectMatch ^/stats /awstats.pl?config=pcsystemd
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/lib/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Accès restreint"
require user 785 6985 jk546
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
##Order allow,deny
##Allow from 0.0.0.0
</Directory>
Alias /awstats-icon /icon
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://domaine/
ProxyPassReverse / http://domaine/
</VirtualHost>
<VirtualHost 0.0.0.0:80>
ServerName www.avenger.com
DocumentRoot /home
Alias /images /img
Alias /robots.txt /robot.txt
Alias /favicon.ico /favicon1.ico
Alias /googlebac4c6ffb1.html /html/googlebac92fb1.html
RedirectMatch ^/stats awstats.pl?config=avenger
ScriptAlias /cgi-bin/ /cgi-bin/
<Directory "/cgi-bin">
AllowOverride None
AuthType Basic
AuthUserFile .access
AuthName "Accès restreint"
require user 6589 854 lm96
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
#Order allow,deny
#Allow from 0.0.0.0
</Directory>
Alias /awstats-icon /icon
#ErrorLog error.log
CustomLog access.log combined
ProxyPass / http://d0maine/
ProxyPassReverse / http://domaine/
</VirtualHost>
L'accès au savoir est la première liberté que chaque homme devrait avoir.