Wie ersetze ich alle Registerkarten in jeder Datei in einem Dateisystemzweig durch jeweils 2 Leerzeichen?

10

Ich codiere Scala und es ist Konvention, doppelte Leerzeichen pro Ebene für die Identifizierung zu verwenden. Durch die Verwendung verschiedener Editoren werden meine Quellen jedoch mit einer Mischung aus Leerzeichen und Tabulatoren gefüllt.

Ich möchte alle Dateien (* .scala-Dateien, aber dies muss nicht angegeben werden) (in einem bestimmten Verzeichnis und dem gesamten zugrunde liegenden FS-Zweig (rekursiv)) automatisch umgestalten und alle Tabulatoren durch doppelte Leerzeichen ersetzen. Ich glaube, es gibt eine einfache und schöne Möglichkeit, dies mit klassischen Unix / GNU-Tools zu tun, aber ich habe keine Erfahrung in diesem Bereich. Würdest du mir so gerne helfen?

Ivan
quelle

Antworten:

9

Rekursiv mit expand(was zu diesem Zweck gemacht wurde):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' {} +

Ich würde es mit sedoder machen perl(siehe Sardathrions Antwort), weil sie Inline-Bearbeitung unterstützen, aber ich wollte expandtrotzdem den guten alten erwähnen .

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

janmoesen
quelle
Die erste Variante funktioniert wie erwartet. Die zweite (Perl-) Variante ersetzt eine Registerkarte durch nur ein Leerzeichen anstelle von zwei.
Ivan
Ja, sorry, das war ein Formatierungsfehler. Der Quellcode sagt zwei Leerzeichen, aber das gerenderte HTML zeigt nur eines.
Janmoesen
10

Dies sollte es tun:

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

Hinweis: Dies wird nicht getestet.

Sardathrion - gegen SE-Missbrauch
quelle
1
Dies ist noch nicht rekursiv. Sie können findeine Shell verwenden, die die **/*.scalaRekursion unterstützt .
Janmoesen
Bearbeitet, um rekursives Verhalten hinzuzufügen ...
Sardathrion - gegen SE-Missbrauch
Bitte nicht fördern find | xargs. Verwenden Sie find -execstattdessen, wie ich in meiner Antwort erwähnt habe. Einfacher und sicherer.
Janmoesen
Versuchte dies, kein Ergebnis. Der Befehl wird sofort zurückgegeben und in den Dateien ändert sich nichts.
Ivan
Dies wird nicht getestet, aber das Wesentliche wird funktionieren.
Sardathrion - gegen SE Missbrauch