返されたテキストブロックを端末の行に分割しますか?

返されたテキストブロックを端末の行に分割しますか?

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

配列にマップされたcshtcshまたはをzsh使用すると、次のようにして1行にその要素を印刷できます。$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

答え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

関連情報