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


当前回答

Ls有选项-m,用“,”一个逗号和一个空格分隔输出。

ls -m | tr -d ' ' | tr ',' ';'

将此结果输送到tr以删除空格或逗号,这将允许您再次将结果输送到tr以替换分隔符。

在我的例子中,我用分隔符替换分隔符;

取代;使用您喜欢的任意一个字符分隔符,因为tr仅用于作为参数传入的字符串中的第一个字符。

其他回答

如果你的xargs版本支持-d标志,那么这应该可以工作

ls  | xargs -d, -L 1 echo

-d是分隔符标志

如果没有-d,那么可以尝试以下操作

ls | xargs -I {} echo {}, | xargs echo

第一个xargs允许您指定分隔符,在本例中为逗号。

设置IFS和使用“$*”的组合可以实现您想要的功能。我使用了一个subshell,所以我不会干扰这个shell的$IFS

(set -- *; IFS=,; echo "$*")

为了捕获输出,

output=$(set -- *; IFS=,; echo "$*")

sed方法,

sed -e ':a; N; $!ba; s/\n/,/g'
  # :a         # label called 'a'
  # N          # append next line into Pattern Space (see info sed)
  # $!ba       # if it's the last line ($) do not (!) jump to (b) label :a (a) - break loop
  # s/\n/,/g   # any substitution you want

注意:

这在复杂度上是线性的,在所有行都附加到sed的模式空间之后只替换一次。

@AnandRajaseka的答案,和其他一些类似的答案,比如这里,是O(n²),因为sed必须做替换每次新行追加到模式空间。

来比较,

seq 1 100000 | sed ':a; N; $!ba; s/\n/,/g' | head -c 80
  # linear, in less than 0.1s
seq 1 100000 | sed ':a; /$/N; s/\n/,/; ta' | head -c 80
  # quadratic, hung

不要白费力气。

ls -m

它就是这么做的。

编辑:如果您希望分隔符为逗号,则只需“ls -m”

啊,力量和简单!

ls -1 | tr '\n' ','

把逗号“,”改成任何你想要的。注意,这包括一个“尾随逗号”(用于以换行符结束的列表)。