
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
, bash
e mksh
FreeBSD sh
pelo menos) também suportam uma forma especial de aspas ( $'...'
) onde coisas como \t
são expandidas.
sed $'s/^ */\t/' < file.in > file.out
O fish
shell expande aqueles fora das aspas:
sed 's/^ */'\t/ < file.in > file.out
Algumas sed
implementações como GNU sed
també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, awk
expande \t
entre 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 -r
ativar 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.