Forum Programmation.shell grepLittleLine.sh

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
Étiquettes :
3
12
mar.
2026

Je n'ai jamais trouvé de commande pour "grep" les "petites lignes". Je veux dire, souvent on cherche quelques chose dans du code avec "grep -r" ou "ripgrep". Seulement, il y a toujours du code minimisé pour ressortir un/des gros pavé qui nous pourrissent la sortie (Typiquement javascript, il y a les lib js). Parfois ces gros pavés saturent le terminal si bien que même avec de la bonne volonté on ne peut pas retrouvé (on peut renvoyer dans un fichier, mais bon). Du coup j'ai fait un script que je pipe à mon grep:

rg ChatMessage .| ~/scripts-utils/utils/grepLittleLine.sh

#!/bin/bash while read line; do if [[ `echo "$line" | wc -c` -lt 1300 ]]; then echo $line fi done
  • # ou

    Posté par  . Évalué à 2 (+1/-0).

    while read do [ ${#REPLY} -lt 1300 ] && echo $REPLY done
    • [^] # Re: ou

      Posté par  (site web personnel) . Évalué à 3 (+0/-0).

      ça manque d'un peu de protection autour du REPLY.

      $ echo "-e nope"|while read; do [ ${#REPLY} -lt 1300 ] && echo $REPLY; done nope
  • # awk

    Posté par  (Mastodon) . Évalué à 8 (+5/-0).

    en awk c'est assez facile:

    awk 'length < 1300'

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

  • # grep sait le faire

    Posté par  . Évalué à 3 (+1/-0).

    Il faut juste utiliser les expressions rationnelles:

    grep -E '^.{,1300}$'

    Par contre, les performances sont désastreuses. Ça fonctionne pour 20 ou 30 caractères, mais l'exemple précédent avec awk est bien plus robuste et efficace.

    Au passage, si tu utilise explicitement bash, tu peux utiliser la syntaxe ${#line} pour avoir le nombre de caractères dans la variable, ce sera déjà beaucoup plus rapide que de lancer un wc pour chaque ligne.

    • [^] # Re: grep sait le faire

      Posté par  . Évalué à 3 (+2/-0). Dernière modification le 15 mars 2026 à 13:32.

      Bonjour

      D'un autre côté, si c'est juste pour faire des recherches, less peut très bien le faire et en utilisant la même regex pour cacher les lignes trop longues.

      Par exemple :

      less leFichier.txt 

      Tapez ensuite -S pour basculer entre le mode "retour à la ligne automatique" ou non => s'il y a des lignes trop longues pour être affichées dans la fenêtre, elles seront tronquées ou pas.

      Tapez sur & et entrez la regex ^.{,1300}$ pour cacher les lignes qui contiendraient 1300 ou plus de caractères.
      Sur la ligne du bas vous verrez s'afficher : &/^.{1300}$

      Vous pourrez aussi rechercher un motif en tapant d'abord sur / et en entrant ensuite le motif à rechercher.

      Tapez sur h pour pouvoir lire l'aide en ligne du pager less

      Comme le pager less est utilisé (par défaut sur debian) pour afficher la sortie de beaucoup de commandes (journalctl, man, …) c'est un très bon investissement d'apprendre à utiliser ses fonctionnalités de base.

      … et dans ce royaume, ceux qui y voient un peu plus clair sont parfois très mal vus.

      • [^] # Re: grep sait le faire

        Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0). Dernière modification le 19 mars 2026 à 15:51.

        C'est pour faire des recherche sur un répertoire. C'est la que j'ai des fichiers js minimifié qui me pourrissent la sortie (et qui évidemment contienne a peu près toutes les expression). Typiquement dans un projet, tu sais que la variable "email" a été utilisé dans une expression que tu aimerai réutilisé. Tu cherche l'exemple.

        Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

        • [^] # Re: grep sait le faire

          Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

          Si tu sais que ce sont les .js qui vont te pourrir la vie, pourquoi ne pas faire quelque chose comme

          grep -r --exclude=\*.js $pattern $dir

          Moi, j’aime utiliser un motif assez précis (chercher email= n’est pas pareil que chercher emailer) et n’afficher que les noms des fichiers…

          “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # sinon

    Posté par  (site web personnel) . Évalué à 3 (+2/-0). Dernière modification le 16 mars 2026 à 08:07.

    Y'a bien un séparateur d'instruction dans tes langages ?

    tr $delimiter '\n' | grep "$@" 

    La lecture ligne à ligne de fichiers en shell c'est à éviter autant que possible.

  • # cut

    Posté par  . Évalué à 3 (+0/-0).

    perso j'utilise | cut -c1-140,

    ça tronque les lignes a 140 caractères, y'a rarement des truc intéressant au delà

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: cut

      Posté par  . Évalué à 2 (+0/-0).

      dans un fichier minifié, tout est dans une seule ligne, et tu veux justement savoir s'il y a le truc qui t'intéresse.

      • [^] # Re: cut

        Posté par  . Évalué à 3 (+0/-0).

        ben justement les autres solutions évincent complètement la ligne silencieusement, celle ci permet de voir qu'on a une touche sur une ligne trop longue, ce qui permet, ensuite si le reste ne donne pas satisfaction de travailler la ligne (avec un déminifieur par exemple)

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: cut

        Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

        tu peux faire :

        $ grep -r toto | cut -c1-140 | grep toto
        Ainsi tu garde la coloration et tu a viré les fichier minifiés (ce ne sera pas dans les 140 premier caractères)

        Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

    • [^] # Re: cut

      Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

      Oui c'est une alternative qui me plait.

      Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

Envoyer un commentaire

Suivre le flux des commentaires

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