Pages : 1
#1 Le 27/01/2011, à 17:31
- Reno911
grep chaine de caractere precise
Bonjour a tous,
Je poste ici un peu par hasard, j espère être au bon endroit et surtout, trouver une réponse a ma question.
Je vous expose ma situation:
j ai écris un petit script pour supprimer des entrée dans un fichier httpd.conf, en gros, mon script cherche dans mon fichier la première et la derniere ligne de mon vhost, et supprime tout ce qu'il y a entre.
Pas de soucis, sauf que, lors de mon grep, je n'arrive pas a récupérer QUE la chaine de caractère qui m'interesse. Par exemple, si je cherche a supprimer le vhost "azerty", que je fais donc un grep sur "azerty", si, par malheur j'ai egalement un enregistrement toto-azerty, mon grep va me sortir les deux entrées, et du coup, causer une erreur.
J'ai bien entendu essayé un grep -w, ou encore grep '\something\W'
Mais rien n'y fait...
En espérant avoir été clair...
Si dessous, mon script:
#!/bin/bash
CONF=/etc/httpd/conf/httpd.conf
for i in `cat liste`
do
u=$(cat -n $CONF | grep $i | grep BEGIN | cut -f1)
v=$(cat -n $CONF | grep $i | grep END | cut -f1)
c=$(($v - $u))
while [ "$c" -ge "0" ]
do
echo $c
sed -i -e ''$u'd' $CONF
(( c-- ))
done
done
Hors ligne
#2 Le 27/01/2011, à 18:43
- Postmortem
Re : grep chaine de caractere precise
Salut,
Je ne suis pas sûr que cela soit exactement ce que tu veux mais voilà ce que j'ai à proposer.
Soit le fichier test_httpd.conf :
<VirtualHost azerty>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
<VirtualHost toto-azerty>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
$ sed '\|<VirtualHost azerty>|,\|</VirtualHost>|d' test_httpd.conf
<VirtualHost toto-azerty>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 28/01/2011, à 08:43
- Reno911
Re : grep chaine de caractere precise
Oui, c'est nikel!
Sauf, que j y avait deja pensé, et que, je ne peux pas/n'arrive pas a mettre des variable dans mon sed...
Pcq azerty, c'etait un exemple, mais mon but final est de pouvoir le remplacer par une variable et supprimer une liste de x vhost.
Je n'arrive a renseigner de variable dans sed que lorsque je n'en place qu'une seule, comme dans mon exemple: sed -i -e ''$u'd' /fichier
...
Merci du coup de main, mais c'est pas encore ca^^
Dernière modification par Reno911 (Le 28/01/2011, à 08:44)
Hors ligne
#4 Le 28/01/2011, à 12:12
- Postmortem
Re : grep chaine de caractere precise
Salut,
Proposition avec une variable.
Le fichier test_httpd.conf :
<VirtualHost azerty>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
<VirtualHost toto-azerty>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
<VirtualHost qsdfgh>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
<VirtualHost toto-qsdfgh>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
Le fichier a_suppr.txt :
azerty
qsdfgh
Puis passer les commandes suivantes :
cp test_httpd.conf test_httpd.conf.sav # Sauvegarde car on va modifier directement dans le fichier
while read VIRTHOST
do
sed -i '\|<VirtualHost '"$VIRTHOST"'>|,\|</VirtualHost>|d' test_httpd.conf
done < a_suppr.txt
Le fichier test_httpd.conf suite à la manip :
<VirtualHost toto-azerty>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
<VirtualHost toto-qsdfgh>
DocumentRoot /mon/document/root
DirectoryIndex index.php index.html
ServerName url.domaine.com
ErrorLog /mon/log/erreur
CustomLog /ma/log
<IfModule mod_php5.c>
php_admin_flag safe_mode Off
php_value max_execution_time 120
php_admin_value max_input_time 60
php_admin_flag log_errors On
php_admin_value cgi.force_redirect 0
php_admin_flag file_uploads On
php_admin_value upload_max_filesize 50M
php_admin_value post_max_size 50M
php_value memory_limit 64M
</IfModule>
</VirtualHost>
EDIT : concernant le grep sur un mot
Un - délimite un mot c'est pour ça que la commande grep -w azerty sort aussi une ligne contenant toto-azerty.
Par contre, elle ne sortirait pas la ligne pour le mot toto_azerty.
Dernière modification par Postmortem (Le 28/01/2011, à 12:30)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne