【问题标题】:Need to manipulate string data using bash需要使用 bash 操作字符串数据
【发布时间】:2015-03-26 22:45:05
【问题描述】:

我有数据以下列格式显示在控制台上:

 "name1",
 "value1",
 "name2",
 "value2",
 "name3",
 "value3",
 ...
 ...

我需要以某种方式处理此输出,以便它以以下格式显示:

 name1 : value1
 name2 : value2
 name3 : value3
 ...
 ...

我不太擅长 shell 脚本,但我知道我的选择是 sed、tr 或 awk(或上述的组合)。我只是不知道如何在这里完成我需要的。提前致谢!

【问题讨论】:

    标签: bash shell name-value


    【解决方案1】:

    将其输入:

     | sed 's/^ *"\|", *$//g' | paste -d: - -
    

    sed 删除引号,粘贴以用冒号连接 2 个连续的行。

    【讨论】:

    • 完美!我一直在努力解决这个问题的“粘贴”部分——以前从未使用过它,所以我不知道该命令的存在。谢谢@glenn
    【解决方案2】:

    glenn jackmans 的paste 解决方案非常优雅,但我想我会提供一些其他解决方案。

    sed : sed -ne '1~2{s/$/ : /;N;s/[",]\|\n //g;p}'

    对于每个奇数行,在末尾添加:,将下一行读入当前模式空间(N),删除所有引号和逗号以及换行符+空格组合并打印。

    awk : awk '{gsub(/[",]|^ */,"")} NR%2{printf $0 " : "} !(NR%2)'

    替换所有引号、逗号和换行符。对于所有奇数行(NR%2 为非零的行)附加: 并在不带换行符的情况下打印。对于所有偶数行(NR%2 为零的行)打印该行(完成前一行)。

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 2013-08-05
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 2023-04-07
      • 2013-05-02
      相关资源
      最近更新 更多