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)
关于什么:
ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' && echo " "
Run Code Online (Sandbox Code Playgroud)
看来您只想获取目录名称,如果是这样,您可以使用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。
最简单的解决方案就是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)