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?

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' {} +


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.