Substitua todos os espaços no início de cada linha por uma tabulação

Substitua todos os espaços no início de cada linha por uma tabulação

Como posso substituir todos os espaços no início de cada linha por uma tabulação?

Eu preferiria usar sed para isso.

Responder1

Portavelmente.

TAB=$(printf '\t')
sed "s/^  */$TAB/" < file.in > file.out

Alguns shells ( ksh93, zsh, bashe mkshFreeBSD shpelo menos) também suportam uma forma especial de aspas ( $'...') onde coisas como \tsão expandidas.

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

O fishshell expande aqueles fora das aspas:

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

Algumas sedimplementações como GNU sedtambém reconhecem \t o significado de TAB por si mesmas. Então, com eles, isso também funcionaria:

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

Portavelmente, awkexpande \tentre aspas duplas. E também usa expressões regulares estendidas, então pode-se usar x+no lugar de xx*:

awk '{sub(/^ +/, "\t"); print}' < file.in > file.out

Responder2

Se você estiver usando GNU/Linux, é necessário sed -rativar expressões regulares estendidas:

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

onde apenas os espaços iniciais são substituídos por um único tab.

informação relacionada