V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jellyspot
V2EX  ›  程序员

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

  •  
  •   jellyspot · 2021-11-23 17:22:00 +08:00 · 1746 次点击
    这是一个创建于 1097 天前的主题,其中的信息可能已经有所发展或是发生改变。

    yaml 如下

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

    需求:

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