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 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