Forum Programmation.c++ impossible de faire un grep sur la sortie de clang-tidy

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
2
30
mar.
2023

Salut,
pour les besoins d'un script gitlab ci, je voudrais faire un grep (reverse) sur la sortie (stdout ?) d'une commande clang-tidy.
Ma commande est la suivante :

$ clang-tidy -p=build --config-file=_clang-tidy --quiet file.hxx | grep -Pvi "^[[:digit:]]*\swarnings\sgenerated"

Le problème, c'est que quand je fais ça, je vois quand même apparaitre les warnings de clang-tidy du type

31198 warnings generated.

Mais si je fais,

echo "31198 warnings generated."  | grep -Pvi "^[[:digit:]]*\swarnings\sgenerated"

la sortie est bien vide, ce qui est le résultat que j'attends…

Est-ce que vous pouvez m'expliquer, s'il vous plait, ce que je ne fais pas bien…

Merci d'avance pour votre aide.

Olivier

  • # grep sur stderr

    Posté par  . Évalué à 4. Dernière modification le 30 mars 2023 à 16:22.

    Probablement que clang-tidy envoie les warnings sur stderr au lieu de stdout et toi tu grep que sur stdout.

    Pour grep sur les deux sorties, tu peux faire avec bash :

    $ clang-tidy -p=build --config-file=_clang-tidy --quiet file.hxx |& grep -Pvi "^[[:digit:]]*\swarnings\sgenerated"

    (Note le |& lors du pipe.)

    • [^] # Re: grep sur stderr

      Posté par  (Mastodon) . Évalué à 5.

      Oh merci pour la syntaxe je la connaissais pas !

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: grep sur stderr

        Posté par  . Évalué à 2. Dernière modification le 30 mars 2023 à 16:25.

        Avec plaisir ! C'est propre à bash par contre.

        • [^] # Re: grep sur stderr

          Posté par  (Mastodon) . Évalué à 5.

          Et j'apprends au passage que >& redirige stdout et stderr

          Moins con ce soir, toussa…

          En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # stdout vs stderr

    Posté par  (Mastodon) . Évalué à 10. Dernière modification le 30 mars 2023 à 16:23.

    Alors j'ai pas regardé en détail ta regexp on dira qu'elle est bonne. Tu as peut-être ton grep qui parse le stdout alors que les messages sont sur stderr ?

    Essaie avec ça :

    commande 2>&1 | grep xxx

    EDIT : se référer à cette meilleure syntaxe

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Merci à tous pour vos réponses

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

    Je tiens à vous remercier pour vos réponses.
    En cherchant un peu on peut aussi envoyer le résultat vers un fichier avec l'option

    --export-fixes=<filename>      - YAML file to store suggested fixes in. The
                                      stored fixes can be applied to the input source
                                      code with clang-apply-replacements.
    

    Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée

Suivre le flux des commentaires

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