Hier, j’avais besoin de faire une recherche dans les logs de mon serveur linux. Or, ceux-ci sont automatiquement compressés tous les jours par gzip. On se retrouve donc avec des fichiers .gz journaliers. Grep n’est pas capable d’en extraire du texte bien sûr.

La solution est de décompresser le fichier vers la sortie standard (stdout) et de faire le grep dessus. Par exemple:

gunzip -c *.gz | grep <motclé>
tar xzfO *.tar.gz | grep <motclé>
tar xfO *.tar | grep <motclé>
2 réponses à “Recherche de texte dans un fichier compressé”
  1. Sébastien dit :

    Pour la première ligne (gunzip -c *.gz | grep ), il y a aussi: zgrep,
    par contre, je n’ai pas trouvé de ztargrep…

    zgrep – search possibly compressed files for a regular expression

    SYNOPSIS

          zgrep [ grep_options ] [ -e ] pattern filename...
    

    DESCRIPTION

          Zgrep  invokes grep on compressed or gzipped files.  All options speci-
          fied are passed directly to grep.  If no file is  specified,  then  the
          standard input is decompressed if necessary and fed to grep.  Otherwise
          the given files are uncompressed if necessary and fed to grep.
    
          If the GREP environment variable is set, zgrep uses it as the grep pro-
          gram to be invoked.
    
  2. Sébastien dit :

    Tant qu’à parler de gzip, une fonction déroutante, est que le format gzip contient un champ pour la date de modification du fichier compressé (ou date de compression).

    Ce qui fait que si on 2 fichiers (non compressés) au contenu identique fichier1.txt dans fichier2.txt,

       cmp renvoit que les fichiers sont identiques (ouf).
       cmp fichier1.txt fichier2.txt
       echo $?
       0
    

    Mais, si on les compressent avec gzip (pas en même temps), on aura deux fichiers compressés différents

       cmp fichier1.txt.gz fichier2.txt.gz
       fichier1.txt.gz fichier2.txt.gz differ: byte 5, line 1
       echo $?
       1
    

    Heureusement, on peut alors utiliser zcmp pour comparer les contenus

       zcmp test_gzip.txt.gz test_gzip2.txt.gz
       echo $?
       0
    

    http://tools.ietf.org/html/rfc1952

    MTIME (Modification TIME)

               This gives the most recent modification time of the original
               file being compressed.  The time is in Unix format, i.e.,
               seconds since 00:00:00 GMT, Jan.  1, 1970.  (Note that this
               may cause problems for MS-DOS and other systems that use
               local rather than Universal time.)  If the compressed data
               did not come from a file, MTIME is set to the time at which
               compression started.  MTIME = 0 means no time stamp is
               available.
    
  3.  
Répondre