Substitua todos os espaços no início de cada linha por um separador

3

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

Eu preferiria usar sed para isso.

    
por user455555009 23.04.2017 / 22:03

2 respostas

8

Portável.

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

Alguns shells ( ksh93 , zsh , bash , mksh e FreeBSD sh , pelo menos) também suportam uma forma especial de aspas ( $'...' ) onde itens como \t são expandidos.

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

O shell fish expande os que estão fora das citações:

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

Algumas implementações de sed como o GNU sed também reconhecem \t como significando TAB por si mesmas. Então, com isso, isso também funcionaria:

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

Portável, awk expande \t dentro de suas aspas duplas. E também usa expressões regulares estendidas, portanto, é possível usar x+ no lugar de xx* :

awk '{sub(/^ +/, "\t"); print}' < file.in > file.out
    
por 23.04.2017 / 22:24
2

Se você estiver usando o GNU / Linux, há sed -r para ativar expressões regulares estendidas:

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

onde apenas os espaços iniciais são todos substituídos por uma única aba .

    
por 23.04.2017 / 23:39

Tags