あなたはもちろんの更新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アドレスの周りに存在しませんのでご注意ください。値の周りに二重引用符だけを置くようにスタイルを細かく制御することは可能ですが、それほど簡単ではありません。特定の値を中心にするのはさらに難しいので、これは問題ではないことを願っています。
あなたはこれらの2つの値の入力ファイルのセットを更新する必要がある場合は、多くの場合、ファイル名をとり、スクリプト、コマンドラインからのトークンとシードプロバイダ作ることができます。
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)
私は理解していませんが、あなたがコード化したい言語でこれを簡単に行うことはできませんか?個人的には、私はperlを使ったり、単にsedを使ったりします。試してみると何の問題が起こっていますか? – derobert