将返回的文本块拆分为终端中的行?

将返回的文本块拆分为终端中的行?

echo $PATH当我发出像或 这样的命令时which program,我经常会得到一个由可能的目录组成的非常大的文本块。这是相当无用的,例如,如果我想看看其中是否有一条特定的路径。

有没有办法将它们分开,以便每个条目都从新行开始?

输出不包括换行符,但我可以看到有适当的分隔符,例如:我可以使用的分隔符。

答案1

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

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

答案2

使用csh,tcshzsh,$PATH映射到$path数组,您可以使用以下方法每行打印其元素:

printf '%s\n' $path

仅使用 zsh:

print -rl $path

(这里假设 的组成部分$PATH不以 开头-并且不为空,print -rl -- "$path[@]"否则使用)。

对于类似 Bourne 的 shell,假设路径不包含通配符(如果包含,请set -f;在 之前添加printf):

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

添加一些|grep something来搜索特定字符串。

$path如果你想用 来搜索,的值zsh,你可以这样做:

vared path

然后像往常一样使用Ctrl+S,Ctrl+R向前向后搜索(如果您使用的是模式,则使用vi ?/等效项)。/vi

答案3

通过 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

相关内容