如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
不要白费力气。
ls -m
它就是这么做的。
其他回答
用换行符替换最后一个逗号:
ls -1 | tr '\n' ',' | sed 's/,$/\n/'
Ls -m包含屏幕宽度字符处的换行符(例如第80行)。
主要是Bash(只有ls是外部的):
saveIFS=$IFS; IFS=$'\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS
在Bash 4中使用readarray(又名mapfile):
readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS
感谢gniourf_gniourf的建议。
为了避免tr的换行符混淆,我们可以在ls中添加-b标志:
ls -1b | tr '\n' ';'
这个命令是为PERL爱好者准备的:
ls -1 | perl -l40pe0
这里的40是空格的八进制ascii码。
-p将逐行处理并打印
-l将负责用我们提供的ASCII字符替换尾随的\n。
-e是通知PERL我们正在执行命令行。
0表示实际上没有命令要执行。
Perl -e0与Perl -e ' '相同
Ls在连接到管道时产生一列输出,因此-1是多余的。
下面是另一个使用内置join函数的perl答案,它不留下尾随分隔符:
ls | perl -F'\n' -0777 -anE 'say join ",", @F'
晦涩的-0777使perl在运行程序之前读取所有输入。
不留下尾随分隔符的Sed替代方法
ls | sed '$!s/$/,/' | tr -d '\n'
你可以使用chomp将多行合并成一行:
Perl -e 'while (<>) {if (/\$/) {chomp;}' bad0 >test
在if语句中加入换行条件。它可以是特殊字符或任何分隔符。
推荐文章
- 如何从命令行在windows中找到mysql数据目录
- 在Bash命令提示符上添加git分支
- 如何创建一个日期对象从字符串在javascript
- 匹配前后的Grep字符?
- 在Android上将字符串转换为整数
- 删除字符串的最后3个字符
- 如何大写一个字符串的第一个字母在省道?
- 如何在Makefile中设置子进程的环境变量
- 带有多个条件的Bash if语句将抛出错误
- 不区分大小写的列表排序,没有降低结果?
- 如何让“wc -l”打印没有文件名的行数?
- 有效地测试Linux上的端口是否打开?
- 发送字符串到stdin
- 在JavaScript中将JSON字符串解析为特定对象原型
- 如何从另一个文件A中删除文件B中出现的行?