Outils d'utilisateurs

Outils du Site


lien:bash:perso:abs:html2sh

retour

html2sh

Script bash pour extraire les scripts des pages html du Guide avancé d'écriture des scripts Bash

#!/bin/bash 
#fichier html obtenu avec wget -r http://abs.traduc.org/abs-5.3-fr/ 
#fonction pour arrêter le script 
arret() { 
echo " arrêt temporaire" 
exit 0 
} 
: ${1:?"Il faut mettre un fichier html en argument"} 
# on recherche programlisting dans le fichier html (-q silencieux sans affichage) 
if grep -q programlisting "$1" 
then  
    # sélection des lignes d'un script entre <pre ... programlisting et /pre> 
    # Tous les scripts seront regroupés dans le fichier temp 
    sed -n '/<pre class=\"programlisting\">/,/<\/pre>/p' "$1" >temp 
    # conversion du fichier du format latin1 en utf8 
    iconv -f iso8859-15 -t utf8 temp -o tmp 
    rm temp # suppression de l'ancien fichier 
arret  # arrêt temporaire 
    # sed -n '/motif/=' donne les numéros de ligne comportant motif 
    # on mémorise chaque fin de script dans une variable fin_script 
    fin_script=$(sed -n "/pre>/=" tmp) 
    echo "fin_script : $fin_script" #on l'affiche 
    fichier=${1%.*} #on enlève l'extension .html du fichier 
    i=1 #on initialise à 1, le numéro du script  
    deb=1 #le début commence à 1 
    for fin in $fin_script #on sépare les différents scripts 
    do 
        # on va du début à la fin d'un script, puis on supprime les lignes de pre, enfin on enlève les lignes vides du début 
        sed -n "$deb,${fin}p" tmp |sed -e "s/<\/pre>//;s/<pre class=\"programlisting\">//" -e 's/^ *$//;/./,$!d' >${fichier}_${i}.sh 
        deb=$fin #pour le script suivant 
        let i=i+1 #on incrémente le numéro de script 
        # rm tmp  
    done 
else 
    echo "pas de script dans $1" 
fi 
exit 0 

Ce script utilise beaucoup l'éditeur de flux Sed, pour en savoir plus :
http://www.commentcamarche.net/faq/478-sed retour

lien/bash/perso/abs/html2sh.txt · Dernière modification: 2009/05/24 21:10 par per