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 02/04/2018, à 10:57

selem5962

Sed et Regex

Bonjour j’exécute un script qui fonctionne sur 99% des fichiers mais pour une raison que je n'arrive pas à déterminer il refuse d'appliquer la modification sur quelques lignes de mes fichiers.
Le script bash lit une liste de fichiers (liste_fichier_sent_present.txt), il extrait la liste des noms de fichiers contenue dans des fichiers de type html. Si ces noms de fichiers sont présents dans liste_fichier_sent_present.txt alors il modifie le HREF dans le fichier html par un nom de fichier sinon par un autre nom.
Cela fonctionne sauf pour quelques lignes de certains fichiers html, cette ligne :

[code]Sent file <a href="file:///C:/Users/asus/Desktop/920_1000.jpg" target="_blank">C:\Users\asus\Desktop\920_1000.jpg</a>.[/code]

Je ne vois pas pourquoi. Pourriez vous m'aider.

#!/bin/bash

echo "Entrez le nom du dossier :" 
read -r dossier_html 
#Récupération de la liste des fichiers envoyés "Sent file" :
grep -or "Sent file <a href=\"file:.*.$" ./$dossier_html | cut -d : -f1 > chemin_des_fichiers.txt
grep -or "Sent file <a href=\"file:.*.$" ./$dossier_html | cut -d \> -f2 | cut -d \< -f1 > nomdufichiersentlu.txt

#Création d'un CSV avec chemin des fichiers htm ; nom du fichier :
paste -d ';' 'chemin_des_fichiers.txt' 'nomdufichiersentlu.txt' > 'chemin_et_nom_sent.csv'

#Récupération de la liste des images encore présentes sur le disque :
echo -e "\n--- Lecture des fichiers : liste_fichier_sent_present.txt \n \n Traitement en cours... \n"
i=0
while read ligne  
do
	tab_fichierpresent[i]=$ligne
	let "i = $i+1"
	
done < liste_fichier_sent_present.txt

#Recherche des liens dans les fichiers html et modification du HREF :
y=0
z=0
for fichierpresent in "${tab_fichierpresent[@]}"
do
		while IFS=';' read champ1 champ2
		do 	
			#Chemin du fichier HTML : $champ1
			#Nom du fichier : $champ2
			if [ "$fichierpresent" = "$champ2" ]
			then
				echo "--- Traitement de l'image : "$champ2" du fichier situé à l'adresse : "$champ1""
				#Remplacement du HREF dans le fichier HTML :
				sed -ien "s/href=\"file:.*_*$champ2\"/href=\"\.\/sent_present\/$champ2\"/g" "$champ1"
				echo -e "--- 100% Traitement effectué : Href du fichier $champ2 modifié dans le fichier $champ1 \n"
				let "y = $y+1"
			else
				sed -ien "s/href=\"file:.*_*$champ2\"/href=\"\.\/image_non_presente.jpg\"/g" "$champ1"
				let "z = $z+1"
			fi
		done < chemin_et_nom_sent.csv
done
echo -e "$y HREF modifiés pour les fichiers 1."
echo -e "$z HREF modifiés pour les fichiers type 2."

Hors ligne

#2 Le 02/04/2018, à 14:49

Watael

Re : Sed et Regex

quelle est la ligne de chemin_et_nom_sent.csv qui devrait correspondre à la ligne que tu montres ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne