Forum Programmation.shell Je ne pipe rien à ce pipe

Posté par  (site Web personnel) . Licence CC By‑SA.
Étiquettes :
5
11
avr.
2020

J'ai une commande dont je voudrais filtrer une certaine ligne :

$ sudo dnf history | head
ID   | Ligne de commande        | Date et heure    | Action(s)      | Modifié
-------------------------------------------------------------------------------
1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7
1023 | update                   | 2020-04-10 19:03 | Upgrade        |   51
1022 | update --refresh         | 2020-04-09 18:35 | Upgrade        |    1
1021 | update                   | 2020-04-08 19:19 | Upgrade        |   17 EE
1020 | -y install https://dl.go | 2020-04-08 15:17 | Install        |    6 EE
1019 | -y install --disablerepo | 2020-04-07 19:09 | Install        |    1
1018 | update                   | 2020-04-07 19:05 | E, I, U        |   13
1017 | autoremove btrfs-progs   | 2020-04-07 19:04 | Removed        |    2

La ligne qui m'intéresse est la troisième, celle qui suit les tirets. Alors je fais :

$ sudo dnf history | head | grep -A1 -E ^- | grep -v -E^-
-------------------------------------------------------------------------------
1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7

J'essaie autre chose :

$ sudo dnf history | head | grep -A1 -E ^- | sed '/^-/d'
-------------------------------------------------------------------------------
1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7

Ce que je ne comprends pas c'est que la sortie est la même que :

$ sudo dnf history | head | grep -A1 -E ^-
-------------------------------------------------------------------------------
1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7

Le deuxième grep ou sed ne prend rien. Une idée ?


P.-S. : j'ai résolu le problème comme ça :

$ sudo dnf history | sed '3q;d'
1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7

plus simple et efficace !

  • # Dites 33

    Posté par  . Évalué à 4. Dernière modification le 11/04/20 à 19:20.

    Il est possible que grep sorte des codes d'échappement ANSI même quand ça passe dans un tuyau. Ajoute | tr '\033' X à ta commande pour faire ressortir les codes.

    Si c'est ça, regarde peut-être du côté de l'option --colors de grep et la variable GREP_COLOR ?

    • [^] # Re: Dites 33

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

      Je confirme :

      $ sudo dnf history | head | grep --color=never -A1 -E ^- | grep -v -E^-
      1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7

      Merci du tuyau ;)

      « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

      • [^] # Re: Dites 33

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

        Sinon, --color=never dans dnf, histoire d'éviter complètement le problème, plutôt que d'avoir à le contourner ?

        Debian Consultant @ DEBAMAX

        • [^] # Re: Dites 33

          Posté par  . Évalué à 2.

          Je ne pense pas que le problème vienne de dnf, sinon le premier grep aurait été problématique aussi et ajouter --colors=never à grep, sauf erreur ma part, ne filtre pas les séquences d'échappement en entrée, donc ça n'aurait pas été vraiment contourner le problème ;-)

          Par contre, il ferait mieux de contrôler ses alias. Un --colors=auto par défaut me semble une bonne idée si la couleur est souhaitée.

          • [^] # Re: Dites 33

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

            Par contre, il ferait mieux de contrôler ses alias. Un --colors=auto par défaut me semble une bonne idée si la couleur est souhaitée.

            C'est exactement ce que j'ai fait. Merci du conseil.

            « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

        • [^] # Re: Dites 33

          Posté par  . Évalué à 2.

          Sinon, il y a le --color=auto qui met la couleur si stdout est un terminal et laisse sans couleur si se n’est pas un terminal, donc un pipe.

  • # ça marche...

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

    Chez moi ça fonctionne (j'ai copier/coller le tableau dans essai.txt) :

    $ cat essai.txt | grep -A1 -E ^- | grep -v -E ^-
    1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7
    
    • [^] # Re: ça marche...

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

      Ayé je sais pourquoi. Voir mon commentaire plus haut.

      « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

    • [^] # Re: ça marche...

      Posté par  . Évalué à 3.

      et sans UUOC

      grep -A1 -E ^- essai.txt| grep -v -E ^-
      1024 | install gammaray         | 2020-04-11 01:18 | Install        |    7
      

Suivre le flux des commentaires

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