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 06/12/2010, à 12:23

Ubuntuteros_debutant

Regex remplacement recursive

Bonjour tout le monde,

J'aimerais pouvoir faire un remplacement de manière récursive, remplacer tous les espaces de lien href="/test.php[ESPACEICI]" avec la puissance du bash. J'ai pensé à une regex du genre href="(.*) " mais je ne sais pas si c'est bien adapté et surtout comment la faire de façon récursive ( grep, sed, awk ? ) .

Je fais appel à vos connaissance pour m'éclairer, merci.

Hors ligne

#2 Le 06/12/2010, à 18:26

Peck

Re : Regex remplacement recursive

Pkutot que la puissace du bash on va faire appel à la puissance de sed (ou perl, la commande est identique)

sed -i 's|/test.php +|/test.php|g' *

Ceci enlève tout les espaces situés après le mot /test.php dans tous les fichiers du répertoire.

Pour faire la même chose dans tous les sous répertoires on utilise find :

find . -type f | xargs -n 1 sed -i 's|/test.php +|/test.php|g'

Ensuite a toi d'adapter à tes besoins.

Hors ligne

#3 Le 07/12/2010, à 08:54

miniSeb

Re : Regex remplacement recursive

~$ cat test
href=""
href="index.php"
href="index.php "
href=" index.php"
~$ sed 's/\(href="\)\s*\([^ ]*\)\s*"/\1\2"/g' test
href=""
href="index.php"
href="index.php"
href="index.php"

Qui est quand même un peu plus propre (je trouve)

Hors ligne

#4 Le 07/12/2010, à 11:35

Ubuntuteros_debutant

Re : Regex remplacement recursive

Merci pour votre rapidité et vos réponses smile.

Je vais plutôt pencher par une combinaison des deux commandes :

find . -type f | xargs -n 1  sed 's/\(href="\)\s*\([^ ]*\)\s*"/\1\2"/g'

comme ça c'est récursive et de façon générique ( href ).

Encore merci, bonne journée.

Dernière modification par Ubuntuteros_debutant (Le 07/12/2010, à 11:48)

Hors ligne

#5 Le 07/12/2010, à 12:45

Ubuntuteros_debutant

Re : Regex remplacement recursive

Voilà ce que ça donne si ça peut servir à quelqu'un smile
Il affiche les liens qui ont été changer dans le fichier file_changed.

for file in `find . -iname '*html' -o -iname '*php' -type f`
do
    basename=`basename $file`; # Extrait le nom du fichier
    size=`stat -c%s $file`;       # Extraction de le taille du fichier
    printf "$file ( $size )\n"; 
    printf "\t[+] Parsing : $basename :";
    sed 's/\(href="\)\s*\([^ ]*\)\s*"/\1\2"/g' $file > /tmp/$basename; # Corrige le lien et le copie dans /tmp
    new_size=`stat -c %s /tmp/$basename`    # Extracte la nouvelle taille
    if [ $size != $new_size ]; then        
        echo ---------------- $file ---------------- >> file_changed;
        diff $file /tmp/$basename -y --suppress-common-lines >> file_changed;    # Ajoute le nom du fichier changer dans file_changed
        mv /tmp/$basename $file;
    else
        rm /tmp/$basename;
    fi;
    printf "OK ( $new_size )\n";
done

Dernière modification par Ubuntuteros_debutant (Le 08/12/2010, à 16:43)

Hors ligne