La commande du mois : supprimer des répétitions


La commande tr est très puissante. Une option souvent oubliée est -s (pour squeeze). Cela permet de squeezer les répétitions de caractères consécutifs.

Quelques exemples

Compacter des séquences du caractère o

    tr -s o <<< 'trooooop loooooong'
    trop long

Simplifier des consonnes doublées (tt o ll) dans certains mots (*)

    tr -s tl <<< "corolle, girolle, frisotter, frisottis, cachottier"
    corole, girole, frisoter, frisotis, cachotier

Dans l'exemple qui suit, j'utilise une astuce pour dire de compacter les séquences de tout caractère. Plutôt qu'énumérer tous les caractères possibles, je prends le complémentaire (option c) de l'ensemble vide, noté ''

    tr -sc '' <<< PPPPaaaarrrkkkiiiinnnsssoonnnn
    Parkinson

Applications pratiques

Une application pratique est la normalisation de suites de mots séparés de plusieurs espaces : 

    tr -s ' ' <<< "Cette   phrase     est  bizarrement       espacée"
    Cette phrase est bizarrement espacée

Enfin on peut associer l'effet de -s et la substitution usuelle de caractère. Dans l'application ci-après, je prends la sortie d'une commande ls -l je normalise le nombre d'espaces et je replace chaque espace normalisé par un tab. Très pratique pour donner en entrée d'une commande cut.

    ls -l | tr -s ' ' '\t'



(*) C'est autorisé par les Rectifications orthographiques du français en 1990 (**)
(**) Autorisé hein, pas imposé. On peut encore écrire "corolle avec deux ailes" si on se sent poète.

Aucun commentaire: