• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jellyspot
V2EX  ›  程序员

请教下 shell 中,有什么方法,能够快速修改 yaml 中,字段顺序

  •  
  •   jellyspot · Nov 23, 2021 · 2380 views
    This topic created in 1658 days ago, the information mentioned may be changed or developed.

    yaml 如下

    name1:
    - herry
    - jack
    
    name2:
    - jack
    - herry
    
    name3:
    - jack
    - herry
    

    需求:

    1. 希望把 name2 中的 herry 和 jack 对调下位置,这种有什么好的方式实现吗?
    2. name1 和 name2 的位置整体对调,有没有什么方式实现
    13 replies    2021-11-24 18:57:02 +08:00
    br_wang
        1
    br_wang  
       Nov 23, 2021
    不如试下正则替换?
    1. herry -> herry2
    2. jack -> herry
    3. herry2 -> jack
    asilin
        2
    asilin  
       Nov 23, 2021
    “1”的解决方案:sed -i '/name2:/{n; N; s/\([^\n]\+\)\n\(.*\)/\2\n\1/}' <文件名>
    jellyspot
        3
    jellyspot  
    OP
       Nov 23, 2021
    @br_wang 但我这里面有多个 name 下都是同样的内容啊,只是顺序不一样,正则貌似没法指定具体字段下的值修改吧
    jellyspot
        4
    jellyspot  
    OP
       Nov 23, 2021
    @asilin 感谢 我试试
    lanlanye
        5
    lanlanye  
       Nov 23, 2021
    文件不是特别多或者特别大的话,用 vim 录宏……
    moshiyeap100
        6
    moshiyeap100  
       Nov 23, 2021
    把 yml 读进来,然后代码里排序,重新生成。
    quanjw
        7
    quanjw  
       Nov 23, 2021
    dd p
    arischow
        8
    arischow  
       Nov 23, 2021 via iPhone
    你所熟悉的语言的 yaml 库
    XSG
        9
    XSG  
       Nov 23, 2021
    可以尝试一个开源小工具 yq
    yEhwG10ZJa83067x
        10
    yEhwG10ZJa83067x  
       Nov 24, 2021
    @quanjw 详细说说。没看懂
    quanjw
        11
    quanjw  
       Nov 24, 2021
    @justrand 抱歉 如果批量操作多个文件应该不行。vi 里面 dd 删除一行,p 粘贴
    zliea
        12
    zliea  
       Nov 24, 2021
    我觉得应该考虑一下 py ,py 做这种应该比较适合。
    kidonng
        13
    kidonng  
       Nov 24, 2021 via Android
    取决于这个任务的容错率多高。
    如果目标数据就像你发的那么简单,sed 之类就行。
    如果稍微复杂点的,还是用专门的 YAML 操作工具,TomWright/dasel 或者 9L 提到的 mikefarah/yq 都可以。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2801 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 15:20 · PVG 23:20 · LAX 08:20 · JFK 11:20
    ♥ Do have faith in what you're doing.