首页 > 解决方案 > 过滤命令输出并将其保存在 Json 格式列表中的 Shell 脚本

问题描述

以前从未使用过 shell 脚本,但我需要在我当前的任务中使用。
所以我必须运行一个返回如下输出的命令:

    awd54a7w6ds54awd47awd refs/heads/SomeInfo1  
    awdafawe23413f13a3r3r refs/heads/SomeInfo2 
    a8wd5a8w5da78d6asawd7 refs/heads/SomeInfo3 
    g9reh9wrg69egs7ef987e refs/heads/SomeInfo4 

而且我需要遍历每一行输出,只获取“SomeInfo”部分并将其写入文件,格式如下:

    ["SomeInfo1","SomeInfo2","SomeInfo3"]

我试过这样的事情:

    for i in $(some command); do
      echo $i | cut -f2 -d"heads/" >> text.txt
    done

但我不知道如何在不使用临时文件的情况下将其格式化为数组。
对不起,如果这个问题很愚蠢而且可能太简单了,我相信我可以自己解决,但我只是没有时间去做,因为它只是我个人想要实现的一个额外的便利功能。

标签: linuxbashshellstring-formatting

解决方案


尝试这个

# json_encoder.sh
arr=()
while read line; do
  arr+=(\"$(basename "$line")\")
done
printf "[%s]" $(IFS=,; echo "${arr[*]}")

然后调用

./your_command | json_encoder.sh

PS。我个人用 Vim 做这种数据按摩。


推荐阅读