Jak przekonwertować 4 spacje na 2 spacje sed
? Czy to możliwe?
Znalazłem to, ale konwertuje tabulatory na spacje:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
Wysłany skrypt konwertuje 4 * n spacji na n tabulatorów, tylko jeśli te spacje są poprzedzone tylko tabulatorami.
Jeśli chcesz zastąpić 4 spacje 2 spacjami, ale tylko z wcięciem, chociaż można to zrobić za pomocą sed, polecam zamiast tego Perla.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
W sed:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Możesz indent
zamiast tego użyć .
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
Czy prosty sposób nie działa:
Jeśli nie, opublikuj dane wejściowe tam, gdzie się nie powiedzie.
źródło
Jeśli mają być konwertowane tylko spacje wiodące:
Z komentarzami:
Zobacz także
'ts'
ustawienia i:retab
polecenia vimaźródło
'ts'
i:retab
nie są to rozwiązania pytania, ale są powiązane i mogą pomóc w osiągnięciu ogólnego celu. Możesz zrobićvim -- *.c
,:set ts=...
a następnie:argdo retab
lub:argdo retab!
. Zobacz także'sw'
opcję i własne możliwości wcięcia vima.Działa, dzieląc wiodące spacje na cztery wystąpienia tej samej grupy (więc wszystkie są równe), a następnie zastępując je tylko dwoma wystąpieniami grupy.
źródło
\+
). Dziękuję Ci.To powinno tylko ścisnąć wiodące sekwencje przestrzeni.
źródło