Reemplace todos los espacios al comienzo de cada línea con una pestaña

Reemplace todos los espacios al comienzo de cada línea con una pestaña

¿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, bashy mkshFreeBSD shal menos) también admiten una forma especial de comillas ( ) donde se expanden $'...'cosas como .\t

sed $'s/^  */\t/' < file.in > file.out

El fishshell expande aquellos que están fuera de comillas:

sed 's/^  */'\t/ < file.in > file.out

Algunas sedimplementaciones como GNU sedtambié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, awkse expande \tdentro 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 -rhabilitar expresiones regulares extendidas:

 echo "        lots of spaces    " | sed -r 's:^\s+:\t:'

donde solo los espacios iniciales se reemplazan con un solo tab.

información relacionada