如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
编辑:如果您希望分隔符为逗号,则只需“ls -m”
啊,力量和简单!
ls -1 | tr '\n' ','
把逗号“,”改成任何你想要的。注意,这包括一个“尾随逗号”(用于以换行符结束的列表)。
其他回答
如果你的xargs版本支持-d标志,那么这应该可以工作
ls | xargs -d, -L 1 echo
-d是分隔符标志
如果没有-d,那么可以尝试以下操作
ls | xargs -I {} echo {}, | xargs echo
第一个xargs允许您指定分隔符,在本例中为逗号。
类似于第一个选项,但省略了后面的分隔符
ls -1 | paste -sd "," -
Ls有选项-m,用“,”一个逗号和一个空格分隔输出。
ls -m | tr -d ' ' | tr ',' ';'
将此结果输送到tr以删除空格或逗号,这将允许您再次将结果输送到tr以替换分隔符。
在我的例子中,我用分隔符替换分隔符;
取代;使用您喜欢的任意一个字符分隔符,因为tr仅用于作为参数传入的字符串中的第一个字符。
Ls在连接到管道时产生一列输出,因此-1是多余的。
下面是另一个使用内置join函数的perl答案,它不留下尾随分隔符:
ls | perl -F'\n' -0777 -anE 'say join ",", @F'
晦涩的-0777使perl在运行程序之前读取所有输入。
不留下尾随分隔符的Sed替代方法
ls | sed '$!s/$/,/' | tr -d '\n'
在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"