Como substituir todas as abas em cada arquivo em uma ramificação do sistema de arquivos com 2 espaços cada?

10

Eu codifico Scala e a convenção é usar espaços duplos por nível para identificação. Mas usar editores diferentes torna minhas fontes preenchidas com uma mistura de espaços e guias.

Eu gostaria de refatorar todos os arquivos (arquivos * .scala, na verdade, mas especificando isso não é necessário) (em um determinado diretório e todo o ramo FS subjacente (recursivamente)) automaticamente, substituindo todas as guias por double espaços. Eu acredito que há uma maneira fácil e bonita de fazer isso com ferramentas clássicas do Unix / GNU, mas eu não tenho nenhuma experiência nesta área. Você seria tão gentil em me ajudar?

    
por Ivan 14.10.2011 / 14:40

2 respostas

9

Recursivamente, usando expand (que foi feito para essa finalidade): 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' {} +

Eu faria isso com sed ou perl (veja a resposta de Sardathrion) porque eles suportam edição in-line, mas eu queria mencionar o bom e velho ' expand de qualquer maneira.

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

    
por 14.10.2011 / 15:12
10

Isso deve ser feito:

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

Nota: isto não é testado.

    
por 14.10.2011 / 14:51