yml文件中二维数组在Linux上问题,Linux:更新yaml文件中的值

您可以用sed/awk/perl在YAML文件当然更新的文字,但与更新CSV,INI,XML,HTML使用这些工具,他们会在更复杂的例子中失败,这些例子中“突然间出现”的值横跨多行,或者在语义上与有效的相同,但不再由相同的匹配字符串组成。

最好只使用一种编程语言和一个真正的解析器(这也是对其他格式的建议)。下面是你如何使用Python和ruamel.yaml这样做,其中我是作者。所以,如果你输入的是input.yml,这样的:

import ruamel.yaml as yaml

data = yaml.load(open('input.yml'), Loader=yaml.RoundTripLoader)

data['initial_token'] = 582023494802482234

data['seed_provider'][0]['parameters'][0]['seeds'] = "10.12.3.4, 1.3.4.3"

print yaml.dump(data, Dumper=yaml.RoundTripDumper)

将让你:

cluster_name: CassandraCluster0

initial_token: 582023494802482234

seed_provider:

- class_name: org.apache.cassandra.locator.SimpleSeedProvider

parameters:

- seeds: 10.12.3.4, 1.3.4.3

请注意,不在身边的IP地址的报价,因为他们是没有必要的。这是可能的,但并不是很容易精确控制风格,只将(双)引号括起来。更难以围绕特定的价值做到这一点,所以我希望这不是问题。

如果您需要更新这两个值一组输入文件的时候你可以让脚本,它的文件名,令牌和种子提供商从命令行:

update_yml input.yml 582023494802482234 "10.12.3.4, 1.3.4.3"

和脚本update_yml:

#! /usr/bin/env python

import sys

import ruamel.yaml as yaml

data = yaml.load(open(sys.argv[1]), Loader=yaml.RoundTripLoader)

data['initial_token'] = sys.argv[2]

data['seed_provider'][0]['parameters'][0]['seeds'] = sys.argv[3]

print yaml.dump(data, Dumper=yaml.RoundTripDumper)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值