AirTag
V2EX  ›  问与答

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

  •  
  •   AirTag · Apr 12, 2022 · 1210 views
    This topic created in 1533 days ago, the information mentioned may be changed or developed.
    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 replies    2022-04-13 12:01:59 +08:00
    blackeeper
        1
    blackeeper  
       Apr 12, 2022
    第一步,提取 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
       Apr 12, 2022
    @blackeeper 谢谢,url 中的 / 会引起 sed 转义错误,
    网上搜索了下
    sed "s~http.*~$url\"~g" file.json
    就可以了
    感谢
    ysc3839
        3
    ysc3839  
       Apr 12, 2022
    @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
       Apr 13, 2022
    @ysc3839 我的是 mac 系统,用这个 grep 命令的时候提示参数不正确。
    我也是因为 mac 自己的各种命令和网上讲的那些有很多不一致才不知道怎么搞。
    还是很感谢。
    ysc3839
        5
    ysc3839  
       Apr 13, 2022 via Android
    @AirTag 可以改成 grep -Eo ,但是第二段就不正常了
    Cusmate
        6
    Cusmate  
       Apr 13, 2022
    如果 shell 的输出格式不变就用 awk 提取
    shell 命令 | awk '{print "{\"config\":[{\"listen\":"$4"\"}]}"}'
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5409 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 05:57 · PVG 13:57 · LAX 22:57 · JFK 01:57
    ♥ Do have faith in what you're doing.