Разделить возвращенный блок текста на строки в терминале?

Когда я даю команды, такие как echo $PATH или which program , я часто получаю очень большой блок текста, состоящий из возможных каталогов. Это довольно бесполезно, если я, например, смотрю, есть ли или нет какой-то конкретный путь среди них.

Есть ли способ разделить их так, чтобы каждая запись начиналась с новой строки?

Выход не включает разрывы строк, но я вижу, что есть соответствующие символы разделителя, такие как : я мог бы использовать.

 > echo foo:bar:baz | tr : '\n' foo bar baz > text=foo:bar:baz > echo -e "${text//:/\n}" foo bar baz 

С помощью csh , tcsh или zsh $PATH отображается в массив $path , и вы можете печатать его элементы по одному на строку:

 printf '%s\n' $path 

Только с zsh:

 print -rl $path 

(здесь, предполагая, что компоненты $PATH не начинаются с - и не являются пустыми, используйте print -rl -- "$path[@]" противном случае).

При использовании Bourne-подобных оболочек, предполагая, что пути там не содержат подстановочных знаков (если они это делают, добавьте set -f; перед printf ):

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

Добавьте некоторые |grep something для поиска определенных строк.

Если вы хотите найти значение $path , с помощью zsh , вы можете сделать:

 vared path 

а затем используйте Ctrl + S , Ctrl + R, как обычно, для поиска в обратном направлении (или эквивалент vi ? / / если вы используете режим vi ).

Через GNU sed ,

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

Пример:

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