如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
这个命令是为PERL爱好者准备的:
ls -1 | perl -l40pe0
这里的40是空格的八进制ascii码。
-p将逐行处理并打印
-l将负责用我们提供的ASCII字符替换尾随的\n。
-e是通知PERL我们正在执行命令行。
0表示实际上没有命令要执行。
Perl -e0与Perl -e ' '相同
其他回答
如果你的xargs版本支持-d标志,那么这应该可以工作
ls | xargs -d, -L 1 echo
-d是分隔符标志
如果没有-d,那么可以尝试以下操作
ls | xargs -I {} echo {}, | xargs echo
第一个xargs允许您指定分隔符,在本例中为逗号。
在majkinetor的回答之上,下面是删除尾随分隔符的方法(因为我还不能在他的回答下评论):
ls -1 | awk 'ORS=","' | head -c -1
只要删除分隔符所需要的尾随字节即可。
我喜欢这种方法,因为我可以使用多字符分隔符+ awk的其他好处:
ls -1 | awk 'ORS=", "' | head -c -2
EDIT
正如Peter所注意到的,head的原生MacOS版本不支持负字节计数。然而,这是很容易解决的。
首先,安装coreutils。GNU核心实用程序是GNU操作系统的基本文件、shell和文本操作实用程序。
brew install coreutils
MacOS提供的命令也以“g”开头安装。例如gls。
一旦你这样做了,你可以使用ghead,它有负字节计数,或者更好,使别名:
alias head="ghead"
Ls有选项-m,用“,”一个逗号和一个空格分隔输出。
ls -m | tr -d ' ' | tr ',' ';'
将此结果输送到tr以删除空格或逗号,这将允许您再次将结果输送到tr以替换分隔符。
在我的例子中,我用分隔符替换分隔符;
取代;使用您喜欢的任意一个字符分隔符,因为tr仅用于作为参数传入的字符串中的第一个字符。
不要白费力气。
ls -m
它就是这么做的。
用换行符替换最后一个逗号:
ls -1 | tr '\n' ',' | sed 's/,$/\n/'
Ls -m包含屏幕宽度字符处的换行符(例如第80行)。
主要是Bash(只有ls是外部的):
saveIFS=$IFS; IFS=$'\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS
在Bash 4中使用readarray(又名mapfile):
readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS
感谢gniourf_gniourf的建议。