Recuar o parágrafo do texto impresso por um script bash

3

Eu tenho um script bash que ecoa parágrafos de texto. Eu quero que eles sejam indentados.

Exemplo:

echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"

imprimirá algo assim:

Something
      foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
foo foo foo foo foo foo foo foo foo foo foo foo

Mas o que eu quero é isso:

Something
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo 
    foo foo foo foo foo foo foo foo foo foo foo foo

Eu prefiro evitar a quebra de muitos desses parágrafos à mão.

Eu já vi todos os tipos de técnicas usando sed e assim por diante, mas eu preciso confiar apenas em builtins de shell (deve ser o mais simples possível).

UPDATE
Coloque desta forma: como as páginas man (para qualquer comando aleatório) formatam todos esses parágrafos tão bem? Certamente eles não foram quebrados à mão? E eu suponho que eles não usaram nada além de builtins ao documentar os comandos básicos?

    
por lonix 26.05.2018 / 13:22

2 respostas

4

Que tal fmt (do GNU Coreutils)

{ echo "Something"
echo -e "\tfoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
} | fmt
Something
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
    foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
    foo foo foo foo foo foo foo foo foo foo foo foo

Você pode adicionar um -w n opcional para alterar o comprimento das linhas agrupadas para n

    
por 26.05.2018 / 13:39
1
somecommand | fold | awk '{ print "\t" $0 }'

Isso levaria a saída de somecommand (por exemplo, echo ), enviá-la por fold , o que a dobraria em 80 caracteres (use fold -w N para dobrar em N caracteres). Em seguida, o script awk imprimirá cada linha recuada por um caractere de tabulação.

Fazer dobras em bash puro é obrigado a resultar em um script mais complicado.

    
por 26.05.2018 / 13:28