如何在管道命令末尾换行

use*_*423 5 command-line bash ls

我想编写一个管道命令序列,它打印出给定目录的所有子目录的列表,并打印在一行中,后面是一个新行。

我无法使以下命令的输出全部位于同一行,然后在末尾添加一个新行。

这是我的管道命令:

ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' 
Run Code Online (Sandbox Code Playgroud)

我希望输出如下:

file1 file3
[user@linux]$
Run Code Online (Sandbox Code Playgroud)

而不是(我实际得到的:

file1 file3[user@linux]$
Run Code Online (Sandbox Code Playgroud)

Jul*_*cea 9

关于什么:

ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' && echo " "
Run Code Online (Sandbox Code Playgroud)

  • 没有必要将任何参数传递给“echo”。它将打印一个不带参数的空新行。 (6认同)

hee*_*ayl 4

看来您只想获取目录名称,如果是这样,您可以使用find

find /share -maxdepth 1 -type d -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

例子:

% find /usr -maxdepth 1 -type d -printf '%f\n'
usr
include
lib
share
sbin
local
bin
games
lib32
src
Run Code Online (Sandbox Code Playgroud)

原答案:

使用智能外壳,例如zsh或使用printf

printf '%s\n' "$(ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ')"
Run Code Online (Sandbox Code Playgroud)

看一眼help printf


Byt*_*der 2

最简单的解决方案就是echo在命令末尾添加一个不带任何参数的普通命令:

ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' ; echo
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢与 链接的命令;,您还可以使用:

echo $(ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ')
Run Code Online (Sandbox Code Playgroud)