Pages : 1
#1 Le 02/04/2018, à 09: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, à 13: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
Pages : 1