> echo foo:bar:baz | tr : '\n'
foo
bar
baz
> text=foo:bar:baz
> echo -e "${text//:/\n}"
foo
bar
baz
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.
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
).
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