Bonjour,
Je suis à peine un peu plus que débutant en bash...
Je suis en train d'écrire un script pour transformer des pages html qui contiennent des tableaux afin de les rendre responsives via bootstrap.
La composition des tableaux varient au sein d'une même page et d'une page à l'autre.
Voici les étapes que j'ai repérées :
1 - Pour chaque ligne de tableau encadrée par les balises <tr> et </tr>, je dois compter le nombre de fois où la balise <td> est présente.
J'arrive à compter le nombre de fois ou un motif apparaît sans un fichier de la manière suivante :
grep -c "motif" nom_du_fichier
mais il faudrait que je puisse travailler dans mon fichier sur ce qui est entre les <tr> et </tr>
2 - Si entre les balises <tr> et </tr>, il y a une image, récupérer la valeur de width pour savoir la proportion que prend l'image par rapport à la page.
3 - A partir de ces infos, je vais faire des calculs : avoir une valeur pour la cellule qui contient l'image et une autre pour les autres cellules
et réinjecter mes résultats pour remplacer les <td> par des <div> avec des classes adaptées.
Pour réinjecter ces résultats, il faut aussi que je puisse sélectionner la ou les balises <td> qui sont suivies d'une image.
Voici le code avant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <tr> <td> <img src="fichier_image.jpg" alt="" width="299" height="319"> </td> <td> <p>Texte</p> </td> <td> <p>Texte</p> </td> <td> <p>Texte</p> </td> </tr>
et ce que je veux obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <div class="row"> <div class="col-$largeur_image> <img src="fichier_image.jpg" alt="" width="299" height="319"> </div> <div class="col-$largeur_texte> <p>Texte</p> </div> <div class="col-$largeur_texte> <p>Texte</p> </div> <div class="col-$largeur_texte> <p>Texte</p> </div> </div>
Voici le script provisoire que j'ai écrit :
Il y a sans doute des erreurs et d'autres manières plus élégantes et économique d'écrire tout cela...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 nom=fichier.html # pour isoler une ligne comprise entre <tr> et </tr> et compter le nombre d'occurences <td> puis les affecter dans une variable : nb_cellules=$(tr '\n' '^' <$nom | grep -o -P '(?<=<tr>).*(?=</tr>)' |tr '^' '\n' | grep -c "<td>") colonne_bootstrap=$((12/nb_cellules)) # pour connaître la largeur de l'image long=$(tr '\n' '^' <fichier.html | grep -o -P '(?<=width=").*(?=")') largeur_image="${long:0:3}" echo $long echo $largeur_image # pour remplacer le <td avec la classe bootstrap adaptée : tr '\n' '^'<fichier.html | tr -d [:blank:] | sed -i "s/<td>^<img/<div class=\"col-'$largeur_image'\"\ /g" fichier.html | tr '^' '\n' # cette commande fonctionne quand je l'utilise seule dans le terminal mais pas dans mon script, sans doute un pb de sortie/entrée des processus... sed -i "s/<td/\<div class="col-$colonne_bootstrap"/g;s/<\/td>/<\/div>/;s/<tr>/<div class=\"row\">/;s/<\/tr>/<\/div>/" fichier.html
Merci pour vos retours.
Patrick
Partager