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


当前回答

sed -e :a -e '/$/N; s/\n/\\n/; ta' [filename]

解释:

-e -表示要执行的命令 :a -为标签 /$/N -定义当前和(N)下一行的匹配范围 s / \ n / \ \ n /;-将所有EOL替换为\n 助教;-如果匹配成功,则标记a

摘自我的博客。

其他回答

为了避免tr的换行符混淆,我们可以在ls中添加-b标志:

ls -1b | tr '\n' ';'

一般不建议解析ls,所以另一种更好的方法是使用find,例如:

find . -type f -print0 | tr '\0' ','

或者使用find和粘贴:

find . -type f | paste -d, -s

对于一般的多行连接(与文件系统无关),请检查:Unix命令行上简明而可移植的“join”。

如果你喜欢Python3,你可以这样做(但是请解释为什么你会这样做?):

ls -1 | python -c "import sys; print(','.join(sys.stdin.read().splitlines()))"

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

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

解释:

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

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

ls  | xargs -d, -L 1 echo

-d是分隔符标志

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

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

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