如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
在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"
其他回答
一般不建议解析ls,所以另一种更好的方法是使用find,例如:
find . -type f -print0 | tr '\0' ','
或者使用find和粘贴:
find . -type f | paste -d, -s
对于一般的多行连接(与文件系统无关),请检查:Unix命令行上简明而可移植的“join”。
就bash
mystring=$(printf "%s|" *)
echo ${mystring%|}
如果你的xargs版本支持-d标志,那么这应该可以工作
ls | xargs -d, -L 1 echo
-d是分隔符标志
如果没有-d,那么可以尝试以下操作
ls | xargs -I {} echo {}, | xargs echo
第一个xargs允许您指定分隔符,在本例中为逗号。
我觉得这个很棒
ls -1 | awk 'ORS=","'
ORS是“输出记录分隔符”,所以现在你的行将用逗号连接。
设置IFS和使用“$*”的组合可以实现您想要的功能。我使用了一个subshell,所以我不会干扰这个shell的$IFS
(set -- *; IFS=,; echo "$*")
为了捕获输出,
output=$(set -- *; IFS=,; echo "$*")
推荐文章
- 如何从命令行在windows中找到mysql数据目录
- 在Bash命令提示符上添加git分支
- 如何创建一个日期对象从字符串在javascript
- 匹配前后的Grep字符?
- 在Android上将字符串转换为整数
- 删除字符串的最后3个字符
- 如何大写一个字符串的第一个字母在省道?
- 如何在Makefile中设置子进程的环境变量
- 带有多个条件的Bash if语句将抛出错误
- 不区分大小写的列表排序,没有降低结果?
- 如何让“wc -l”打印没有文件名的行数?
- 有效地测试Linux上的端口是否打开?
- 发送字符串到stdin
- 在JavaScript中将JSON字符串解析为特定对象原型
- 如何从另一个文件A中删除文件B中出现的行?