Dividir um bloco de texto retornado em linhas no terminal?

5

Quando dou comandos como echo $PATH ou which program , muitas vezes recebo um bloco muito grande de texto que consiste em diretórios de maio. Isso é bastante inútil, se eu estou, por exemplo, olhando para ver se há ou não um caminho específico entre eles.

Existe uma maneira de dividi-los para que cada entrada comece em uma nova linha?

A saída não inclui quebras de linha, mas posso ver que existem caracteres delimitadores apropriados, como : , que eu poderia usar.

    
por sebf 20.05.2014 / 12:09

3 respostas

6
> echo foo:bar:baz | tr : '\n'
foo
bar
baz

> text=foo:bar:baz
> echo -e "${text//:/\n}"
foo
bar
baz
    
por 20.05.2014 / 12:11
5

Com csh , tcsh ou zsh , $PATH é mapeado para a matriz $path e você pode imprimir seus elementos um por linha com:

printf '%s\n' $path

Apenas com zsh:

print -rl $path

(aqui assumindo que os componentes de $PATH não iniciam com - e não estão vazios, use print -rl -- "$path[@]" caso contrário).

Com shells semelhantes a Bourne, assumindo que os caminhos não contenham caracteres curinga (se o fizerem, adicione set -f; before printf ):

(IFS=:; printf '%s\n' $PATH)

Adicione um pouco de |grep something para pesquisar por cadeias de caracteres específicas.

Se você quiser pesquisar o valor de $path , com zsh , você pode fazer:

vared path

e, em seguida, use Ctrl + S , Ctrl + R como de costume para pesquisar para trás (ou o vi ? / / equivalente se você re usando o modo vi ).

    
por 20.05.2014 / 12:28
1

Através do GNU sed ,

echo $PATH | sed 's/:/\n/g'

Exemplo:

$ echo $PATH | sed 's/:/\n/g'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
    
por 20.05.2014 / 12:16