Pages : 1
#1 Le 01/04/2018, à 17:56
- selem5962
Regex [Résolu]
Bonjour je rencontre une problématique dans le développement de mon script bash.
Je dispose d'un tableau contenant une liste de fichier (tab_fichierpresent) sous la forme XXX.jpg. Un second fichier CSV contenant l'adresse du fichier local et le nom du fichier sous la forme : ./fichier.html;nom_du_fichier.jpg.
J’exécute une boucle, à savoir si le fichier est présent dans le tableau tab_fichierpresent et dans le CSV ($champ2) alors modifier son adressage dans le fichier html ($champ1) en remplaçant le lien html HREF contenant $champ2 par un nouveau lien
.
A l'étape où je suis bloqué le script effectue bien les modifications dans le fichier html sélectionné ($champ1) mais change l'intégralité des liens href de ce fichier et non pas uniquement celui répondant à la condition (If).
Pourriez vous m'aider à résoudre ce problème de boucle.
for fichierpresent in "${tab_fichierpresent[@]}"
do
while IFS=';' read champ1 champ2
do
#tab_adressedufichier[p]=$champ1
#tab_nomdelimage[p]=$champ2
if [ "$fichierpresent" = "$champ2" ]
then
echo "Traitement de l'image : "$champ2" du fichier situé à l'adresse : "$champ1""
#remplacer le href par le bon lien dans ce fichier.
grep -or "Sent file <a href=\"file:[A-Za-z0-9 /:.=_><\<%\"]*.$" "$champ1" | sed -e "s/file:[A-Za-z0-9 /:.=_><%]*\"/\.\/$champ2\"/g"
echo "########## Traitement effectué."
fi
let "p = $p+1"
done < chemin_et_nom_sent.csv
done
Résultat par exemple pour le fichier images.jpg. Il modifie bien le lien href pour le fichier nommé "images.jpg" mais également tous les autres.
Résultat :
Traitement de l'image : images.jpg du fichier situé à l'adresse : ./cup/filou.html
Sent file <a href="./images.jpg" target="_blank">1711621558.jpeg</a>.
Sent file <a href="./images.jpg" target="_blank">054_1000.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">images.jpg</a>. <<--
Sent file <a href="./images.jpg" target="_blank">images1.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">images2.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">images3.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">imagesIYO6CL8X.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">images25ARJ9UQ.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">imagesWT57X5ZA.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">images9MGY8M2S.jpg</a>.
Sent file <a href="./images.jpg" target="_blank">imagesBTVR0LYZ.jpg</a>.
########## Traitement effectué.
Dernière modification par selem5962 (Le 01/04/2018, à 18:19)
Hors ligne
#2 Le 01/04/2018, à 18:18
- Watael
Re : Regex [Résolu]
salut,
tu devrais modifier ton sujet car ton problème ne porte pas sur ce qui est indiqué mais sur la regex à utiliser pour ne valider qu'une seule ligne d'un fichier en contenant plusieurs qui peuvent correspondre.
NB: sed sait faire ce que fait grep.
pourquoi demander à grep de faire une recherche récursive ?
Dernière modification par Watael (Le 01/04/2018, à 18:18)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 01/04/2018, à 18:19
- selem5962
Re : Regex [Résolu]
C'était le Grep qui s'appliquait sur tous le fichier et pas juste sur le ligne.
grep "Sent file <a href=\"file:[A-Za-z0-9 /:.=_><\<%\"]*$champ2[A-Za-z0-9 /:.=_><\<%\"]*" "$champ1" | sed -e "s/file:[A-Za-z0-9 /:.=_><%]*\"/\.\/$champ2\"/g"
Merci quand même.
Hors ligne
Pages : 1