Comment convertir 4 espaces en 2 espaces avec sed
? C'est possible?
J'ai trouvé cela mais il convertit les tabulations en espaces:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
Le script que vous avez publié convertit 4 * n espaces en n tabulations, uniquement si ces espaces sont précédés uniquement par des tabulations.
Si vous souhaitez remplacer 4 espaces par 2 espaces, mais uniquement en retrait, alors qu'il est possible de le faire avec sed, je recommande plutôt Perl.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
Dans sed:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Vous voudrez peut-être utiliser à la indent
place.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
La méthode simple ne fonctionne-t-elle pas:
Sinon, postez une entrée là où elle échoue.
la source
Si seuls les espaces de début doivent être convertis:
Avec commentaires:
Regardez également le
'ts'
réglage et la:retab
commande de vimla source
'ts'
et:retab
ne sont pas des solutions à la question, mais sont liés et peuvent aider à atteindre votre objectif global. Vous pouvez le fairevim -- *.c
,:set ts=...
puis:argdo retab
ou ou:argdo retab!
. Voir également l''sw'
option et les capacités de mise en retrait de vim.Il fonctionne en divisant les espaces de tête en quatre instances du même groupe (ils sont donc tous égaux), puis en les remplaçant par seulement deux instances du groupe.
la source
\+
). Je vous remercie.Cela ne devrait comprimer que les séquences d'espaces en tête.
la source