Forum Programmation.shell Parcourir un fichier à l'envers.

Posté par  .
Étiquettes : aucune
0
4
avr.
2005
Bonjour,

Je cherche un moyen de parcourir, dans un terminal, un fichier en partant de la fin et en remontant vers le début...

Un peu comme un more mais en partant du bas.

Est-ce que quelqu'un sait si ça existe ?

Merci
  • # plus ou moins ;-)

    Posté par  . Évalué à 1.

    ca s'appelle 'less'
    c'est un 'more' amélioré (permet de revenir en arrière).
    • [^] # Re: plus ou moins ;-)

      Posté par  (site web personnel) . Évalué à 2.

      Et en tapant 'G' majuscule, tu vas directement à la fin du fichier.

      En tapant CTRL+B, tu vas en arrière (ou simplement avec Page Up si tu disposes de cette touche).

      (mêmes raccourcis que vi)
      • [^] # Ou rev ...

        Posté par  . Évalué à 4.

        Si tu veux le lire complètement à l'envers tu peux essayer :

        $ cat fichier | rev | more
        • [^] # Re: Ou tac ...

          Posté par  (site web personnel) . Évalué à 2.

          $ cat fichier | tac | more

          Un peu moins barbare ...
          • [^] # Re: Ou tac ...

            Posté par  (site web personnel) . Évalué à 2.

            c'est pas moins barbare, juste ca fait pas du tout pareil.

            Sinon plus rapide pour ce que tu propose :

            $ tac fichier | more

            De meme

            $ rev fichier | more

            est plus rapide.
            • [^] # Re: Ou tac ...

              Posté par  (site web personnel) . Évalué à 2.

              > c'est pas moins barbare, juste ca fait pas du tout pareil.

              Ben entre le mec qui lit ses logs avec "rev" et celui qui les lit avec "tac", qui est le plus barbare, hein ;-)

              (entièrement d'accrord pour le reste)
  • # B

    Posté par  (site web personnel) . Évalué à 2.

    pour revenir en arrière avec more, sur un fichier, c'est la touche B.

    "La première sécurité est la liberté"

    • [^] # Re: B

      Posté par  (site web personnel) . Évalué à 2.

      Non, more ne permet que d'aller vers le bas. Je parie que tu utilises less sans le savoir (genre lien symbolique de more vers less).
      • [^] # Re: B

        Posté par  . Évalué à 1.

        si...
        extrait de la page man de more :


        MORE(1) Manuel de l utilisateur Linux MORE(1)
        ...
        b ou ^B
        Recule de k écrans. Par défaut, recule d'un écran.

        ....

        Cette documentation a été constituée en utilisant les pages de manuel de plusieurs autres versions et après un examen exhaustif du code source.
        ....
        • [^] # Re: B

          Posté par  . Évalué à 1.

          bon forcement me suis plante sur la fin...

          Cette page documente la version 5.19 (Berkeley 6/29/88), qui est celle actuellement utilisée par la communauté Linux.
        • [^] # Re: B

          Posté par  (site web personnel) . Évalué à 2.

          si...

          Mmm, pourtant j'avais testé avant de poster. Ah, j'ai compris : ça ne marche que quand tu fais more fichier (ce que je ne fais jamais), pas quand tu fais cat fichier | more ou toute autre ligne de commande incluant des tuyaux (ce que je fais quotidiennement). Avec less, ça marche dans les deux cas.
          • [^] # Re: B

            Posté par  (site web personnel) . Évalué à 2.

            c'est pour ça que j'ai précisé sur un fichier...

            Je suppute d'ailleurs qu'il relit bestialement le fichier depuis le début.

            "La première sécurité est la liberté"

            • [^] # Re: B

              Posté par  (site web personnel) . Évalué à 2.

              > Je suppute d'ailleurs qu'il relit bestialement le fichier depuis le début.

              D'après strace, ça n'a pas l'air d'être le cas. Par contre, il réaffiche tout l'écran, contrairement a less.
  • # Autre solution !

    Posté par  . Évalué à 5.

    On connaît bien la commande cat, qui affiche les lignes d'un fichier. On oublie en revanche la commande tac qui effectue le parcours en sens opposé.

    Ainsi, la premiere ligne affichée par
    $ tac foo
    sera la dernière ligne du fichier foo, et la dernière ligne affichée sera la première ligne du fichier foo.

    Tu peux utiliser more par dessus cela :

    $ tac foo | more

    Voilou !
    • [^] # Re: Autre solution !

      Posté par  . Évalué à 2.

      Suivant la même idée, perso j'ai ça dans mon ~/.bash_profile :
      regap() {
      	tac "${@}" | ${PAGER}
      }
      C'est tout con, mais pratique pour faire de temps en temps des `regap fichier` ou des `commande | regap`.
    • [^] # Re: Autre solution !

      Posté par  (site web personnel) . Évalué à 2.

      Excellent !!!! merci pour la command tac, je connaissais pas et c'est super pratique pour afficher la fin d'un fichier de log car les dernières entrées ce trouvent à la fin et que certains fichiers font plusieurs mégas.

      Il y a bien "tail" pour afficher la fin mais quand on ne sait pas le nombre de ligne qui nous intéresse c'est un peu dur.

      bref, merci... ça me simplifiera la vie :D
      • [^] # Re: Autre solution !

        Posté par  (site web personnel) . Évalué à 1.

        C'est pas "normal" que ces fichiers fassent plusieurs mégas, tu devrais lorgner tu côté de logrotate ou concurrents pour assurer une rotation régulière non ?
        • [^] # Re: Autre solution !

          Posté par  (site web personnel) . Évalué à 3.

          ah ben voilà ! encore un truc que j'apprend, c'est quand même génial linuxfr.org... merci. Je vais finir par devenir un bon administrateur de mon ordi :-)... me reste plus qu'a me lancer dans logrotate pour voir son fonctionnement.

          Certains (2 ou 3) de mes fichiers de logs font plusieurs mégas car apparemment j'ai tous mes logs depuis l'installation de linux. Je trouve ça marrant les logs, tu vois tous les reboot, les halt que tu as fait depuis l'installation :-)

          Par contre un truc intéressant, je contrôle maintenant souvent mes logs d'authentification et je remarque que quelques fois, j'ai une centaine de tentative de connection en ssh sur une ou deux minutes... je soupçonne que les ordinateurs distant sont des robots qui tentent des connections un peu au hasard. Et comme appraremment, ils tentent souvent l'utilisateur root, j'ai désactivé le fait que l'on puisse se connecter en root par ssh, donc d'abord en utilisateur normal et puis on fait un su si on veut. Ca limite les dangers. Et en même temps, dans guarddog, je bloque cette IP entièrement l'IP.
  • # tac

    Posté par  . Évalué à 2.

    tac fichier fait un "cat" du fichier en partant de la fin vers le début.
    Après tu peux le "piper" dans un more ou un less à loisir.
  • # Légèrement hors-sujet, mais on ne sait jamais ...

    Posté par  . Évalué à 3.

    Au fait pourquoi veux-tu lire ton fichier à l'envers ?

    Si c'est pour visualiser un fichier de log, il y a quelque chose de très utile : c'est la commande tail, qui t'affiche les dernières lignes d'un fichier.

    Et plus utile encore, tail -f qui permet de voir les dernières lignes du fichier de log s'afficher au fur à mesure qu'elles sont écrites (presque en temps réel).
    • [^] # Re: Légèrement hors-sujet, mais on ne sait jamais ...

      Posté par  (site web personnel) . Évalué à 2.

      comme le fameux (fumeux ?) tail -f /var/log/messages
    • [^] # Re: Légèrement hors-sujet, mais on ne sait jamais ...

      Posté par  . Évalué à 2.

      Effectivement, c'est pour regarder une log et pouvoir remonter à partir de la dernière erreur vue...

      En tout cas merci pour ces différentes façons de faire (en particulier less que je ne connaissais pas bien).
      • [^] # Re: Légèrement hors-sujet, mais on ne sait jamais ...

        Posté par  . Évalué à 3.

        Si tu aimes "less", tu vas adorer "most" (j'ai pas d'url, mais je pense qu'il est packagé sur pas mal de distribs). Enfin, perso j'y vois un less++, à essayer donc, mais maintenant, les goût et les couleurs...
        • [^] # Re: Légèrement hors-sujet, mais on ne sait jamais ...

          Posté par  (site web personnel) . Évalué à 2.

          Perso, j'ai essayé most pendant quelques mois, et je suis revenu à less avec joie. Je n'ai plus en tête ce qui me gênait dans most, mais je sais que j'en suis revenu.
          • [^] # Re: Légèrement hors-sujet, mais on ne sait jamais ...

            Posté par  . Évalué à 2.

            En fait, pour préciser, perso j'utilise suivant les cas "most" ou "more".

            Je trouve "most" mieux fichu pour les flux que je vais parcourir dans tous les sens, et pour lesquels la coloration fait sens. Typiquement, il est très bien comme $PAGER pour "man" (enfin, encore, goût, couleurs, tout ça). Et j'utilise "more" principalement pour mes consultations de complexité linéaire, style trouver un endroit particulier d'un flux (quand flemme de faire une grep ou que ça s'y prête mal). Le gros avantage avec "more", c'est que quand tu le quittes tu as rempli ton terminal, et que tu peux en copier un bout. Enfin bref, j'aime bien le côté "cat partiel" de "more". Et clairement, "more" est beaucoup plus rapide à lancer (oui, je le sens, c'est pas juste une considération théorique).

            Du coup, et c'est là que je voulais en venir, si je me sers plus du tout de "less", c'est parcequ'il est un peu le cul entre deux chaises. Il est plus lent que "more", il efface le terminal, et il est moins gavé de features (niveau recherche ou coloration par exemple) que "most". Bref, de mon point de vue, il est rarement, voir jamais, l'outil le plus adapté. Mais bon, les habitudes, tout ça, vaut pas grand chose... Enfin, je comprends tout à fait que tu aies d'autres pratiques.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.