¿Cómo se convierten 4 espacios en 2 espacios con sed
? ¿Es posible?
Encontré esto pero convierte la pestaña en espacios:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
La secuencia de comandos que publicó convierte 4 * n espacios en n pestañas, solo si esos espacios van precedidos solo por pestañas.
Si desea reemplazar 4 espacios por 2 espacios, pero solo en sangría, aunque es posible hacerlo con sed, recomiendo Perl en su lugar.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
En sed:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Es posible que desee utilizar indent
en su lugar.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
No funciona la forma directa:
Si no, publique alguna entrada donde falla.
fuente
Si solo se van a convertir los espacios iniciales:
Con comentarios:
También mire la
'ts'
configuración y el:retab
comando de vimfuente
'ts'
y:retab
no son soluciones a la pregunta, pero están relacionadas y pueden ayudar a abordar su objetivo general. Puedes hacervim -- *.c
,:set ts=...
y luego:argdo retab
o:argdo retab!
. Consulte también la'sw'
opción y las capacidades de sangría propias de vim.Funciona dividiendo los espacios iniciales en cuatro instancias del mismo grupo (para que todos sean iguales) y luego reemplazándolos con solo dos instancias del grupo.
fuente
\+
). Gracias.Eso solo debería exprimir las secuencias principales de espacios.
fuente