Comment remplacer tous les onglets de chaque fichier dans une branche de système de fichiers avec 2 espaces chacun?


10

Je code Scala et sa convention est d'utiliser des espaces doubles par niveau pour l'identification. Mais l'utilisation de différents éditeurs rend mes sources remplies d'un mélange d'espaces et d'onglets.

Je voudrais refactoriser tous les fichiers (fichiers * .scala, en fait, mais cela n'est pas nécessaire) (dans un répertoire donné et toute la branche FS sous-jacente (récursivement)) automatiquement, en remplaçant tous les onglets par des espaces doubles. Je crois qu'il y a une manière simple et belle de le faire avec les outils Unix / GNU classiques, mais je manque d'expérience dans ce domaine. Seriez-vous si gentil à m'aider?

Réponses:


9

Récursivement, en utilisant expand(ce qui a été fait à cet effet):find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

Je le ferais avec sedou perl(voir la réponse de Sardathrion) car ils prennent en charge l'édition en ligne, mais je voulais expandquand même mentionner le bon vieux .

EDIT: Ce serait find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +


La première variante fonctionne comme prévu. La deuxième variante (perl) remplace un onglet avec un seul espace au lieu de deux.
Ivan

Ouais, désolé: c'était une erreur de formatage. Le code source indique deux espaces, mais le HTML rendu n'en affiche qu'un.
janmoesen

10

Cela devrait le faire:

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +

Remarque: ceci n'est pas testé.


1
Ce n'est pas encore récursif. Vous pouvez utiliser findou un shell qui prend en charge la **/*.scalarécursivité.
janmoesen

Modifié pour ajouter un comportement récursif ...
Sardathrion - contre les abus SE

Veuillez ne pas promouvoir find | xargs. Utilisez find -execplutôt, comme je l'ai mentionné dans ma réponse. Plus simple et plus sûr.
janmoesen

J'ai essayé ça, pas de résultat. La commande revient immédiatement et rien ne change à l'intérieur des fichiers.
Ivan

ce n'est pas testé mais l'essentiel fonctionnera.
Sardathrion - contre les abus SE
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.