如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?


当前回答

你可以使用chomp将多行合并成一行:

Perl -e 'while (<>) {if (/\$/) {chomp;}' bad0 >test

在if语句中加入换行条件。它可以是特殊字符或任何分隔符。

其他回答

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"

上面的Python回答很有趣,但自己的语言甚至可以使输出更好:

python -c "import sys;打印(sys.stdin.read () .splitlines())”

类似于第一个选项,但省略了后面的分隔符

ls -1 | paste -sd "," -

快速Perl版本与尾随斜杠处理:

ls -1 | perl -E 'say join ", ", map {chomp; $_} <>'

解释:

perl -E:执行perl的特性支持(例如,…) 说:打印与载体返回 join ", ", ARRAY_HERE:用","加入数组 地图{切齿;$_} ROWS:从每一行中删除载体返回并返回结果 <>: stdin,每一行都是一个ROW,与映射耦合将创建每个ROW的数组