
¿Cómo puedo reemplazar todos los espacios al principio de cada línea con una tabulación?
Preferiría usar sed para esto.
Respuesta1
Portátilmente.
TAB=$(printf '\t')
sed "s/^ */$TAB/" < file.in > file.out
Algunos shells ( ksh93
, zsh
, bash
y mksh
FreeBSD sh
al menos) también admiten una forma especial de comillas ( ) donde se expanden $'...'
cosas como .\t
sed $'s/^ */\t/' < file.in > file.out
El fish
shell expande aquellos que están fuera de comillas:
sed 's/^ */'\t/ < file.in > file.out
Algunas sed
implementaciones como GNU sed
también reconocen \t
el significado de TAB por sí mismas. Entonces con esos, esto también funcionaría:
sed 's/^ */\t/' < file.in > file.out
Portablemente, awk
se expande \t
dentro de sus comillas dobles. Y también usa expresiones regulares extendidas, por lo que se pueden usar x+
en lugar de xx*
:
awk '{sub(/^ +/, "\t"); print}' < file.in > file.out
Respuesta2
Si estás usando GNU/Linux, debes sed -r
habilitar expresiones regulares extendidas:
echo " lots of spaces " | sed -r 's:^\s+:\t:'
donde solo los espacios iniciales se reemplazan con un solo tab.