如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
如果你喜欢Python3,你可以这样做(但是请解释为什么你会这样做?):
ls -1 | python -c "import sys; print(','.join(sys.stdin.read().splitlines()))"
其他回答
你可以使用:
ls -1 | perl -pe 's/\n$/some_delimiter/'
类似于第一个选项,但省略了后面的分隔符
ls -1 | paste -sd "," -
看起来答案已经存在了。
如果你愿意 a, b, c格式,使用ls -m (Tulains Córdova的答案)
或者如果你想要bc格式,使用ls | xargs (Chris J回答的简化版本)
或者如果你想要任何其他的分隔符,如|,使用ls |粘贴-sd'|' (Artem ' s answer的应用)
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
为了避免tr的换行符混淆,我们可以在ls中添加-b标志:
ls -1b | tr '\n' ';'