![将返回的文本块拆分为终端中的行?](https://linux22.com/image/36815/%E5%B0%86%E8%BF%94%E5%9B%9E%E7%9A%84%E6%96%87%E6%9C%AC%E5%9D%97%E6%8B%86%E5%88%86%E4%B8%BA%E7%BB%88%E7%AB%AF%E4%B8%AD%E7%9A%84%E8%A1%8C%EF%BC%9F.png)
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
,tcsh
或zsh
,$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