Recherche de texte dans un fichier compressé

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éflexions sur “Recherche de texte dans un fichier compressé

  1. 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. 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *