Utiliser une expression régulière en bash

Ce sed bien limité

Au boulot j'ai dû travailler sur l'analyse de texte brut. Rien qui ne soit insurmontable en gros mais en bash il n'est pas toujours facile de trouver la doc qu'on souhaite. Parce qu'à chaque fois que je cherchais le moyen de remplacer toutes les tabulations par un espace il refusait d’interpréter ma classe \t. Avec sed, il faut utiliser la ligne suivante pour remplacer les tabulations par des espaces :

sed 's/    / /g'
sed 's/TABULATION/ESPACE/g' # C'est plus simple à lire que de compter les espaces


    Mais comme les problèmes viennent quand on ne les attend pas, j'avais paramétré mon éditeur préféré pour transformer les tabulations en 4 espaces (c'est plus commode pour PHP et puis c'est une habitude que j'ai prise en travaillant en Python). Donc Sublime Text me remplaçait la tabulation présente dans le sed par 4 caractères et cassait mon code.

Awk à la rescousse !

Lorsque j'en ai vraiment eu marre, j'ai cherché un peu plus précieusement si d'autres personnes avaient eu le même problème que moi. Après avoir fermé chaque onglet où on proposait des sed plus alambiqués les uns que les autres je suis tombé sur une fonction interne d'awk : gensub(). Cette fonction permet de faire un regex replace en profitant de la puissance des regex PRCE. Voici donc la fonction qui m'a permis de faire ce que je voulais :

awk '{ print gensub(/\t/," ","g") }'


    J'espère que cela vous aura été utile.