#1 Le 06/12/2010, à 11: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, à 17: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, à 07: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, à 10:35
- Ubuntuteros_debutant
Re : Regex remplacement recursive
Merci pour votre rapidité et vos réponses .
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, à 10:48)
Hors ligne
#5 Le 07/12/2010, à 11:45
- Ubuntuteros_debutant
Re : Regex remplacement recursive
Voilà ce que ça donne si ça peut servir à quelqu'un
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, à 15:43)
Hors ligne