IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[shell] Comparer deux fichiers html


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut [shell] Comparer deux fichiers html
    Bonjour,

    J'ai un serveur linux pour lequel je réalise régulièrement des audits avec un script (identique à l'aixview mais pour linux).

    Dans mon exemple, j'ai réalisé un audit le 22/07/2014 et un audit le 01/12/2014. Cette audit m'a généré deux fichiers html.

    Je souhaite comparer les deux fichiers (changement d'IP, etc...) et afficher cette comparaison dans un 3ème fichier en conservant le squelette html.

    Ma première question, est-ce réalisable en shell ? Si non, peut-être avec un autre langage ? lequel?

    J'ai par ailleurs testé les commandes diff, cmp et comm sans que le résultat soit réellement satisfaisant.


    Merci pour votre aide.
    Matthieu

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    pour un rendu identique, le code HTML peut être très différent; c'est ce qui fait la difficulté de parser ces fichiers.

    peut-être qu'en utilisant html2text, et en passant le résultat à sed pour "gommer" un formatage, alors les outils de comparaison de fichiers auront une sortie dont tu pourras te servir pour construire ton troisième fichier HTML...?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 361
    Par défaut
    Bonjour,

    A première vue, ce n'est pas trivial...

    As tu le squelette html en question ?

    Est-ce que ton outil, ne ferait pas le travail en plusieurs étapes, du genre:
    -Création d'un fichier texte, ou mieux, de type csv avec le résultat de l'audit.
    -Création du rapport en html.

    Et dans ce cas, il suffirait entre les 2 phases, de poser le filtre...

  4. #4
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Par défaut
    Voici le script que j'utilise. Le problème est que les 3/4 du script ont des caractères bizarroïdes...c'est comme si dans le ksh il y'avais un autre script d'encapsulé.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    #!/usr/bin/ksh
    #(@) DCT automatique
    ##@version S0F7: mise a jour pour Common Bundle
    ##
     
    options=$*
    PATH=/sbin:/usr/sbin:/usr/bin:/bin:/usr/symcli/bin:usr/sbin
    usage="Usage: $0 [-m recipient] utilization application GoRo\nwhere recipient is a mail recipient at orange.com,\nand utilization is something like PROD, PREPROD, SECOURS\n"
    while getopts m: option; do
            case $option in
                            m)  mailuser="$OPTARG"
                                shift 2
                                ;;
                      	?)  print "$usage"
                                return 2
                                ;;
            esac
    done
    if [[ -z "$2" ]]; then
      print "$usage"
      exit 1
    fi
     
     
    PREV=`pwd`
    HWTYPE=`uname -i`
    RELEASE_FILE=`ls -1 /etc/redhat-release||/etc/*-release`
    OSVERS=`cat ${RELEASE_FILE} |tr -d 'a-zA-Z()\ '`
    OSRELEASE=`echo $OSVERS|awk -F'.' '{print $1}'`
    # Verif Presence libstdc++
    `ls -1 /usr/lib/libstdc++.so* 2>/dev/null 1>&2` ; LIBSTDC=$?
     
    if [[ $LIBSTDC -eq 0 ]]
    then
    echo -e "Presence librairie de compatibilite : OK\n"
    PRE_LIBSTDC='OK'
    else
    echo -e "Presence librairie de compatibilite : KO\n"
    echo -e "Veuillez Installer la libstdc++ correspondante a votre PF\n"
    #exit 0
    PRE_LIBSTDC='KO'
    fi
     
    PREREQUIS='KO'
    lshwrpm="unknow"
    	case $OSRELEASE in
    		3)	case $HWTYPE in
    				i386)	lshwrpm="lshw-2.15-1.el3.rf.i386.rpm"
    					;;
    				x86_64)	lshwrpm="lshw-2.16-1.el3.rf.x86_64.rpm"
    					;;
    			esac
    			;;
    		4)	case $HWTYPE in
    				i386)	lshwrpm="lshw-2.14-1.el4.rf.i386.rpm"
    					;;
    				x86_64) lshwrpm="lshw-2.14-1.el4.rf.x86_64.rpm"
    					;;
    			esac
    			;;
    		5)	case $HWTYPE in
    				i386)   lshwrpm="lshw-2.15-1.el5.rf.i386.rpm"
    					;;
    				x86_64) lshwrpm="lshw-2.15-1.el5.rf.x86_64.rpm"
    					;;
    			esac
    			;;
    		6)	case $HWTYPE in
    				i386)   lshwrpm="lshw-2.16-1.el6.rf.i686.rpm"
    					;;
    				x86_64) lshwrpm="lshw-2.16-1.el6.rf.x86_64.rpm"
    					;;
    			esac
    			;;
    	esac
     
    # lshw a des pre-requis concernant la librarie libstdc++.so.X ou X = 5 ou 6
    # Verification:
    #RPM de lshw pour systeme common bundle linux 5
     
    if [[ $PRE_LIBSTDC = "OK" ]]
    then
    	# creation d'un repertoire temporaire
    	export WRKDIR=`mktemp -d /tmp/mkdct_linux.XXXXXX`
     
    else
    exit 0
    fi
     
    if [[ $PRE_LIBSTDC = "OK" ]]
    then
    	# Extraction du script mkdct.ksh et des rpm de lshw
    	SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
    	tail -n +$SKIP $0 | tar zx -C $WRKDIR
    fi
     
    if [ -f /usr/sbin/lshw ]
    then
    	echo -e "Commande lshw: Disponible sur le Systeme, Pas d'installation\n"
    	PREREQUIS='OK'
    else
    	if [[ $PRE_LIBSTDC = "OK"  ]]
    	then
    		cd $WRKDIR
    		echo -e "Pre requis: On utilise $lshwrpm\n"
    		rpm2cpio $lshwrpm | cpio -id --quiet
    		PREREQUIS='OK'
    	fi
    fi
     
    if [[ $PREREQUIS = "OK" ]]
    then
    	# execute le script de DCT automatique proprement dit
    	echo -e "Execution du script: PATIENTEZ !\n"
    	cd $WRKDIR
    	./mkdct.ksh $options
    	echo "Recuperation du fichier rÃ83>ésultat"
    	mv -f ./*html $PREV
     
    	# delete the temp files
    	cd $PREV
    	echo -e "Supression rep de travaille\n"
    	rm -rf $WRKDIR
    fi
     
    exit 0
     
    __ARCHIVE_FOLLOWS__
    ‹]k}bDæa³=‡ðá[¿ôH3Ù[hˆLèõÞÖÀñW)I—IÒö‡FÈãC«UC‹¯{騒—¢£—õÇü£1¦äÄæÙÊý
    Ô›.”ºAd[½XJœÙôúÖ®©*§£¯êè¥Úfò¯œØ¬m™5„ÎñPW9ã{oW¬bèÁÒ¼/JNlñ¥]zWHý…{+]µTó—e©U#î{^ilF‘ÂÞàòˆª}Ÿìj¶yô-š®Û9R<Sù£¯ó™nFõq° ±<³yxÇøï~âWÇßY|J„‹
    ó'ì÷F|û¾U†œYPኻ÷g—áÀ$ŒHNgS¢:a³øÈ6«ÔøY’‹á¶Ï®OèܨۓмÎ1¬J•ðêf‘r,"•s#Ñ¥f³
    ø[à;Æ/^wOš4*4“öyî*

    Quand au html2text pas évident de l'installer dans un environnement professionnel sans demandé d'accord au préalable...sans être sur que ça sera nécessaire au final.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Je ne comprends pas pourquoi la ligne 31 a des backticks.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `ls -1 /usr/lib/libstdc++.so* 2>/dev/null 1>&2` ; LIBSTDC=$?
    Quelqu'un pourrait-il m'expliquer?

    À la ligne 117, le mot "Résultat" est bizarrement encodé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo "Recuperation du fichier rÃ83>ésultat"
    La ligne 128 contient le séparateur entre la fin du script et le début de l'archive:
    laquelle archive est récupérée par le script lui-même à la ligne 93:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
    et contient (si l'on en croit les commentaires) un script mkdct.ksh et des rpm de lshw...

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 361
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Je ne comprends pas pourquoi la ligne 31 a des backticks.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `ls -1 /usr/lib/libstdc++.so* 2>/dev/null 1>&2` ; LIBSTDC=$?
    Quelqu'un pourrait-il m'expliquer?
    C'est vrai que c'est étrange, car ici, on essai d’exécuter les différentes libstdc++ (le résultat du ls), ce qui provoque un segfault chez moi...

    A part ça, il suffit de commenter de la ligne 111 à la ligne 124, ensuite il suffit de voir comment fonctionne le script installé dans le répertoire temporaire...

Discussions similaires

  1. comparer deux fichier .xls
    Par oursquetaire dans le forum Excel
    Réponses: 6
    Dernier message: 06/07/2006, 16h52
  2. [JDOM] Comparer deux fichiers XML en Java
    Par calimero2611 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/06/2006, 11h19
  3. Comparer deux fichier
    Par Taz_8626 dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2006, 11h46
  4. comparer deux fichiers avec une api windows
    Par sweetdreamer dans le forum Windows
    Réponses: 4
    Dernier message: 25/05/2006, 22h10
  5. Fonction c qui compare deux fichiers ???
    Par babyface dans le forum C
    Réponses: 4
    Dernier message: 19/11/2005, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo