Jak zamienić wszystkie zakładki w każdym pliku w gałęzi systemu plików na 2 spacje?


10

Koduję Scalę, a jej konwencją jest używanie podwójnych spacji na poziom do identyfikacji. Ale używanie różnych edytorów sprawia, że ​​moje źródła są wypełnione mieszanką spacji i tabulatorów.

Chciałbym refaktoryzować wszystkie pliki (tak naprawdę pliki * .scala, ale określenie tego nie jest konieczne) (w danym katalogu i całej gałęzi FS (rekurencyjnie)) automatycznie, zastępując wszystkie tabulatory podwójnymi spacjami. Wierzę, że jest to łatwy i piękny sposób na zrobienie tego za pomocą klasycznych narzędzi Unix / GNU, ale brakuje mi doświadczenia w tej dziedzinie. Czy byłbyś tak miły, aby mi pomóc?

Odpowiedzi:


9

Rekurencyjnie, używając expand(który został stworzony w tym celu):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' {} +

Zrobiłbym to z sedlub perl(patrz odpowiedź Sardathriona), ponieważ obsługują one edycję bezpośrednią, ale i tak chciałem wspomnieć o dobrym starym expand.

EDYCJA: Tak byłoby find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +


Pierwszy wariant działa zgodnie z oczekiwaniami. Drugi wariant (perl) zastępuje tabulator tylko jedną spacją zamiast dwóch.
Ivan

Tak, przepraszam: to był błąd formatowania. Kod źródłowy mówi dwie spacje, ale renderowany HTML pokazuje tylko jedną spację.
janmoesen

10

To powinno to zrobić:

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

Uwaga: nie zostało to przetestowane.


1
To jeszcze nie jest rekurencyjne. Możesz użyć findpowłoki lub powłoki obsługującej **/*.scalarekurencję.
janmoesen

Edytowane w celu dodania zachowania rekurencyjnego ...
Sardathrion - przeciwko nadużyciom SE

Proszę nie promować find | xargs. Użyj find -execzamiast tego, jak wspomniałem w mojej odpowiedzi. Łatwiej i bezpieczniej.
janmoesen

Próbowałem tego, bez rezultatu. Polecenie natychmiast wraca i nic się nie zmienia w plikach.
Ivan

nie jest to testowane, ale jego istota będzie działać.
Sardathrion - przeciwko nadużyciom SE
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.