如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
我觉得这个很棒
ls -1 | awk 'ORS=","'
ORS是“输出记录分隔符”,所以现在你的行将用逗号连接。
其他回答
为了避免tr的换行符混淆,我们可以在ls中添加-b标志:
ls -1b | tr '\n' ';'
一般不建议解析ls,所以另一种更好的方法是使用find,例如:
find . -type f -print0 | tr '\0' ','
或者使用find和粘贴:
find . -type f | paste -d, -s
对于一般的多行连接(与文件系统无关),请检查:Unix命令行上简明而可移植的“join”。
如果你的xargs版本支持-d标志,那么这应该可以工作
ls | xargs -d, -L 1 echo
-d是分隔符标志
如果没有-d,那么可以尝试以下操作
ls | xargs -I {} echo {}, | xargs echo
第一个xargs允许您指定分隔符,在本例中为逗号。
Ls有选项-m,用“,”一个逗号和一个空格分隔输出。
ls -m | tr -d ' ' | tr ',' ';'
将此结果输送到tr以删除空格或逗号,这将允许您再次将结果输送到tr以替换分隔符。
在我的例子中,我用分隔符替换分隔符;
取代;使用您喜欢的任意一个字符分隔符,因为tr仅用于作为参数传入的字符串中的第一个字符。
用换行符替换最后一个逗号:
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的建议。
推荐文章
- Node.js上的html解析器
- Java中的split()方法对点(.)不起作用。
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?
- Windows和Linux上的c++编译:ifdef开关
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- 如何循环通过一个目录递归删除具有某些扩展名的文件
- 在Bash中获取日期(比当前时间早一天)
- Linux: kill后台任务
- 在Lua中拆分字符串?
- 如何修改Linux系统中打开文件的数量限制?
- 在OSX中永久设置PATH环境变量
- 如何在Python中按字母顺序排序字符串中的字母
- 删除Bash脚本中的重复条目
- python: SyntaxError: EOL扫描字符串文字