V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Killian
V2EX  ›  Linux

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

  •  
  •   Killian · 2015-11-27 22:24:37 +08:00 · 5824 次点击
    这是一个创建于 3319 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如:
    [
    {"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": ""}
    ]
    15 条回复    2015-12-03 12:10:33 +08:00
    HiHi
        1
    HiHi  
       2015-11-27 22:40:36 +08:00   ❤️ 1
    提供一个渣实现:
    ```
    sed "$((`cat 1.txt|wc|awk '{print $1}'`-1))"s/', *$'// 1.txt
    ```

    楼下继续
    xuyinan503
        2
    xuyinan503  
       2015-11-27 23:32:47 +08:00   ❤️ 1
    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
        3
    halfcrazy  
       2015-11-27 23:37:49 +08:00
    tac|sed '2s/},/}/g' aaa.txt|tac > aaa.txt
    ooxxcc
        4
    ooxxcc  
       2015-11-27 23:51:10 +08:00
    @halfcrazy 哈哈哈原来还能这样……
    lululau
        5
    lululau  
       2015-11-27 23:54:15 +08:00   ❤️ 1
    gsed -n 'x;1d;$!p;${s#, *$##;p;x;p}'

    sed 游戏最好玩了,不过我这个感觉太冗长了,不知道有没有高手可以给个精炼点的
    halfcrazy
        6
    halfcrazy  
       2015-11-28 00:03:18 +08:00   ❤️ 1
    @ooxxcc 额。笔误写反了 tac aaa.txt|sed '2s/},/}/g' |tac 这样就好了
    dant
        7
    dant  
       2015-11-28 01:19:28 +08:00 via Android   ❤️ 1
    sed $[$(wc -l file)-1]'s/,//g'
    dant
        8
    dant  
       2015-11-28 01:25:11 +08:00 via Android
    更正: sed $[$(wc -l < file)-2]'s/,//' file
    shidenggui
        9
    shidenggui  
       2015-11-28 09:13:52 +08:00   ❤️ 1
    echo 'Gk$xZZ' > /tmp/$$ && vim -s /tmp/$$ input.file
    halfcrazy
        10
    halfcrazy  
       2015-11-28 21:49:10 +08:00
    pityonline
        11
    pityonline  
       2015-11-29 08:42:47 +08:00 via iPhone
    为什么要用 shell 处理一个 json ,况且 json 最后一个逗号是可有可无的?
    Killian
        12
    Killian  
    OP
       2015-11-29 10:29:50 +08:00
    @pityonline 目标是原来有一个 IP 列表 1.1.1.1:80 ,用 curl 测试可用性,把可用的保存为一个 json 样式
    非可有可用 用 python 的 json.loads 有最后一个逗号会报错
    pityonline
        13
    pityonline  
       2015-11-29 13:54:59 +08:00
    @Killian 可能我给记混了, perl 里的 array/hash 的最后一个元素后的逗号是可有可无的, json 的好像没有最后一个逗号的。
    huangmingyou
        14
    huangmingyou  
       2015-12-03 09:48:18 +08:00
    @lululau 你这个好厉害,看了半天 man page 终于弄明白原理。
    Arthur2e5
        15
    Arthur2e5  
       2015-12-03 12:10:33 +08:00   ❤️ 1
    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)) 命令长得像。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2635 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:20 · PVG 23:20 · LAX 07:20 · JFK 10:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.