shell 如何删除 倒数第二行的逗号

2015-11-27 22:24:37 +08:00
 Killian
比如:
[
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""},
]

重新输出为
[
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""}
]
5813 次点击
所在节点    Linux
15 条回复
HiHi
2015-11-27 22:40:36 +08:00
提供一个渣实现:
```
sed "$((`cat 1.txt|wc|awk '{print $1}'`-1))"s/', *$'// 1.txt
```

楼下继续
xuyinan503
2015-11-27 23:32:47 +08:00
xuyinan@xuyinan:~$ cat test.txt
[
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""}
]
xuyinan@xuyinan:~$ cat test.txt|sed 's/},\s]/}\n]/'
[
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""},
{"ip_port": "11.12.13.14:80", "user_pass": ""}
]
xuyinan@xuyinan:~$
halfcrazy
2015-11-27 23:37:49 +08:00
tac|sed '2s/},/}/g' aaa.txt|tac > aaa.txt
ooxxcc
2015-11-27 23:51:10 +08:00
@halfcrazy 哈哈哈原来还能这样……
lululau
2015-11-27 23:54:15 +08:00
gsed -n 'x;1d;$!p;${s#, *$##;p;x;p}'

sed 游戏最好玩了,不过我这个感觉太冗长了,不知道有没有高手可以给个精炼点的
halfcrazy
2015-11-28 00:03:18 +08:00
@ooxxcc 额。笔误写反了 tac aaa.txt|sed '2s/},/}/g' |tac 这样就好了
dant
2015-11-28 01:19:28 +08:00
sed $[$(wc -l file)-1]'s/,//g'
dant
2015-11-28 01:25:11 +08:00
更正: sed $[$(wc -l < file)-2]'s/,//' file
shidenggui
2015-11-28 09:13:52 +08:00
echo 'Gk$xZZ' > /tmp/$$ && vim -s /tmp/$$ input.file
halfcrazy
2015-11-28 21:49:10 +08:00
pityonline
2015-11-29 08:42:47 +08:00
为什么要用 shell 处理一个 json ,况且 json 最后一个逗号是可有可无的?
Killian
2015-11-29 10:29:50 +08:00
@pityonline 目标是原来有一个 IP 列表 1.1.1.1:80 ,用 curl 测试可用性,把可用的保存为一个 json 样式
非可有可用 用 python 的 json.loads 有最后一个逗号会报错
pityonline
2015-11-29 13:54:59 +08:00
@Killian 可能我给记混了, perl 里的 array/hash 的最后一个元素后的逗号是可有可无的, json 的好像没有最后一个逗号的。
huangmingyou
2015-12-03 09:48:18 +08:00
@lululau 你这个好厉害,看了半天 man page 终于弄明白原理。
Arthur2e5
2015-12-03 12:10:33 +08:00
https://gist.github.com/Arthur2e5/58717a25f931715d3203#file-some-sh

前几个是不带外部命令强迫症的,接下来的 ed 仅供娱乐(要点是你根本不需要其他程序来帮你数行数)。

@dant 使用 $[ c-style-arith-expr ] 是过时( Bourne, Non-POSIX )语法, bash 好心支持也不要滥用。现在推荐用 $((c-style-arith-expr))( POSIX ),顺便还和 bash 拓展的 ((c-style-arith-expr)) 命令长得像。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/239527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX