Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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