yaml 如下
name1:
- herry
- jack
name2:
- jack
- herry
name3:
- jack
- herry
需求:
1
br_wang 2021-11-23 17:27:08 +08:00
不如试下正则替换?
1. herry -> herry2 2. jack -> herry 3. herry2 -> jack |
2
asilin 2021-11-23 17:30:56 +08:00
“1”的解决方案:sed -i '/name2:/{n; N; s/\([^\n]\+\)\n\(.*\)/\2\n\1/}' <文件名>
|
3
jellyspot OP @br_wang 但我这里面有多个 name 下都是同样的内容啊,只是顺序不一样,正则貌似没法指定具体字段下的值修改吧
|
5
lanlanye 2021-11-23 17:54:01 +08:00
文件不是特别多或者特别大的话,用 vim 录宏……
|
6
moshiyeap100 2021-11-23 17:57:44 +08:00
把 yml 读进来,然后代码里排序,重新生成。
|
7
quanjw 2021-11-23 18:50:30 +08:00
dd p
|
8
arischow 2021-11-23 18:52:42 +08:00 via iPhone
你所熟悉的语言的 yaml 库
|
9
XSG 2021-11-23 18:56:33 +08:00
可以尝试一个开源小工具 yq
|
10
yEhwG10ZJa83067x 2021-11-24 09:45:22 +08:00
@quanjw 详细说说。没看懂
|
12
zliea 2021-11-24 11:59:05 +08:00
我觉得应该考虑一下 py ,py 做这种应该比较适合。
|
13
kidonng 2021-11-24 18:57:02 +08:00 via Android
取决于这个任务的容错率多高。
如果目标数据就像你发的那么简单,sed 之类就行。 如果稍微复杂点的,还是用专门的 YAML 操作工具,TomWright/dasel 或者 9L 提到的 mikefarah/yq 都可以。 |