V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
AirTag
V2EX  ›  问与答

求助,使用捕获 shell 输出的一个固定格式的地址,写入到指定 json 的某个字段中

  •  
  •   AirTag · 2022-04-12 11:44:41 +08:00 · 791 次点击
    这是一个创建于 974 天前的主题,其中的信息可能已经有所发展或是发生改变。
    shell 有如下输出

    ```shell
    listen url is http://127.0.0.1:56099/AbcDEfJ-lr4=/
    ```

    需要将上面的`http://127.0.0.1:56099/AbcDEfJ-lr4=/`写入到一个指定的 json 文件里面。
    ```json
    {
    "config": [
    {
    "listen": "http://127.0.0.1:56099/AbcDEfJ-lr4=/"
    }
    ],
    }
    ```

    我现在一直是等 shell 输出这个地址然后手动复制粘贴到 json 文件里面。
    感觉这样太复杂了,但是自己不是很会 shell 各种文本处理命令。
    往上咕噜咕噜了一番也没有很好的解决这个问题。

    所以想请教大家如何通过命令实现可以自动修改 json 文件里面对应的字段。

    感谢!
    6 条回复    2022-04-13 12:01:59 +08:00
    blackeeper
        1
    blackeeper  
       2022-04-12 15:59:22 +08:00
    第一步,提取 url 。url=$(echo "listen url is http://127.0.0.1:56099/AbcDEfJ-lr4=/" |grep 'http://' |sed 's#^.*\( http:.*\)#\1#g')
    第二步,替换 json file 内容。sed "s/http.*/$url\"/g" file.json
    AirTag
        2
    AirTag  
    OP
       2022-04-12 17:25:37 +08:00
    @blackeeper 谢谢,url 中的 / 会引起 sed 转义错误,
    网上搜索了下
    sed "s~http.*~$url\"~g" file.json
    就可以了
    感谢
    ysc3839
        3
    ysc3839  
       2022-04-12 18:10:16 +08:00
    @blackeeper 需要这么麻烦吗? grep 就可以直接用正则表达式匹配
    ```
    $ echo 'listen url is http://127.0.0.1:56099/AbcDEfJ-lr4\=/' | grep -Po 'http.+'
    http://127.0.0.1:56099/AbcDEfJ-lr4\=/
    ```
    保险一点可以带上前面的字符串
    ```
    echo 'listen url is http://127.0.0.1:56099/AbcDEfJ-lr4\=/' | grep -Po 'listen url is \Khttp.+'
    http://127.0.0.1:56099/AbcDEfJ-lr4\=/
    ```
    AirTag
        4
    AirTag  
    OP
       2022-04-13 10:58:15 +08:00
    @ysc3839 我的是 mac 系统,用这个 grep 命令的时候提示参数不正确。
    我也是因为 mac 自己的各种命令和网上讲的那些有很多不一致才不知道怎么搞。
    还是很感谢。
    ysc3839
        5
    ysc3839  
       2022-04-13 11:24:57 +08:00 via Android
    @AirTag 可以改成 grep -Eo ,但是第二段就不正常了
    Cusmate
        6
    Cusmate  
       2022-04-13 12:01:59 +08:00
    如果 shell 的输出格式不变就用 awk 提取
    shell 命令 | awk '{print "{\"config\":[{\"listen\":"$4"\"}]}"}'
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5508 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:58 · PVG 09:58 · LAX 17:58 · JFK 20:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.