Modifier un fichier avec AWK, SED etc...
Résolu/Fermé
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
-
6 oct. 2011 à 14:34
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 oct. 2011 à 12:23
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 oct. 2011 à 12:23
A voir également:
- Modifier un fichier avec AWK, SED etc...
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
8 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
10 oct. 2011 à 09:32
10 oct. 2011 à 09:32
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/ } } '
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
10 oct. 2011 à 12:23
10 oct. 2011 à 12:23
\|<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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
6 oct. 2011 à 14:51
6 oct. 2011 à 14:51
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> $
;-))
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
Modifié par pcsystemd le 6/10/2011 à 17:04
Modifié par pcsystemd le 6/10/2011 à 17:04
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
6 oct. 2011 à 17:09
6 oct. 2011 à 17:09
Donne moi un exemple concret AVANT => APRÈS avec un nom de domaine comme "Servername www.pcsystemd.fr", s'il te plaît, merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
Modifié par pcsystemd le 7/10/2011 à 07:38
Modifié par pcsystemd le 7/10/2011 à 07:38
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
7 oct. 2011 à 14:14
7 oct. 2011 à 14:14
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> $
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
Modifié par pcsystemd le 10/10/2011 à 09:16
Modifié par pcsystemd le 10/10/2011 à 09:16
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.
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
10 oct. 2011 à 11:56
10 oct. 2011 à 11:56
Merci énormément zipe31 cela fonctionne.
Il ne me reste plus qu'a aller pour au moins la 150émé fois relire le tuto de jipicy sur SED afin de comprendre ce script car certains paramètres et options m'échappent et j'ai du mal a sasisir tous le script.
Il ne me reste plus qu'a aller pour au moins la 150émé fois relire le tuto de jipicy sur SED afin de comprendre ce script car certains paramètres et options m'échappent et j'ai du mal a sasisir tous le script.