Como converter 4 espaços em 2 espaços com sed
? É possível?
Achei isso, mas ele converte tabulação em espaços:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
O script que você postou converte 4 * n espaços em n guias, somente se esses espaços forem precedidos apenas por guias.
Se você deseja substituir 4 espaços por 2 espaços, mas apenas em recuo, embora seja possível fazê-lo com sed, eu recomendo o Perl.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
Em sed:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Você pode usar em seu indent
lugar.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
O caminho direto não funciona:
Caso contrário, publique alguma entrada onde ela falhar.
fonte
Se apenas espaços iniciais forem convertidos:
Com comentários:
Veja também a
'ts'
configuração e o:retab
comando do vimfonte
'ts'
e:retab
não são soluções para a pergunta, mas estão relacionadas e podem ajudar a atingir seu objetivo geral. Você pode fazervim -- *.c
,:set ts=...
e então:argdo retab
ou:argdo retab!
. Consulte também a'sw'
opção e os recursos de recuo do vim.Ele funciona dividindo os espaços iniciais em quatro instâncias do mesmo grupo (para que todos sejam iguais) e depois substituindo-os por apenas duas instâncias do grupo.
fonte
\+
). Obrigado.Isso deve apenas espremer as principais seqüências de espaços.
fonte