Jer*_*oen 21 linux bash ubuntu json sh
是否可以使用bash脚本格式化lsjson数组的输出?要成为有效的json,dirs和文件的所有名称都需要用双引号括起来,用逗号分隔,整个东西需要用方括号括起来.即转换:
jeroen@jeroen-ubuntu:~/Desktop$ ls
foo.txt bar baz
Run Code Online (Sandbox Code Playgroud)
至
[ "foo.txt", "bar", "baz" ]
Run Code Online (Sandbox Code Playgroud)
编辑:我非常喜欢能在所有Linux服务器上运行的东西; 因此,不是依赖于python,而是拥有纯粹的bash解决方案.
Ign*_*ams 18
是的,但角落案例和Unicode处理将引起你的反响.最好委托一种本地支持它的脚本语言.
$ ls
? a "a" à a b ?
$ python -c 'import os, json; print json.dumps(os.listdir("."))'
["\u00e0", "\"a\"", "\u79c1", "a b", "\u3042", "a"]
Run Code Online (Sandbox Code Playgroud)
Dav*_*ave 14
使用perl作为编码器; 它保证是无障碍的,无处不在,并且使用管道,它仍然相当干净:
ls | perl -e 'use JSON; @in=grep(s/\n$//, <>); print encode_json(\@in)."\n";'
Run Code Online (Sandbox Code Playgroud)
小智 14
如果您知道没有文件名包含换行符,请使用jq:
ls | jq -R -s -c 'split("\n")'
jq标志的简短说明:
-R 将输入视为字符串而不是JSON-s 将所有行连接成一个数组-c 创建一个紧凑的输出这需要版本1.4或更高版本的jq.如果它不适合您,请尝试此操作:
ls | jq -R '[.]' | jq -s -c 'add'
Tro*_*117 12
你好,你可以用sed和awk做到这一点:
ls | awk ' BEGIN { ORS = ""; print "["; } { print "\/\@"$0"\/\@"; } END { print "]"; }' | sed "s^\"^\\\\\"^g;s^\/\@\/\@^\", \"^g;s^\/\@^\"^g"
Run Code Online (Sandbox Code Playgroud)
编辑:更新以解决"与空格的问题.我/@用作替换模式",因为/它不是文件名的有效字符.
| 归档时间: |
|
| 查看次数: |
23499 次 |
| 最近记录: |