我在chef(配置管理工具)中使用ruby语法时遇到了一些麻烦。
我正在处理的差异是分配以下属性:
runner = ChefSpec::Runner.new(platform: "ubuntu", version: version)
runner = ChefSpec::Runner.new(:platform => "ubuntu", :version => version)
我需要能够在这两种语法之间切换,因为它们似乎适用于不同版本的chef / ruby - 我们将进行升级,但现在需要修复。
我是regexp的新手,但在python中尝试过这样:
for line in fileinput.input(inplace=1, backup='.bak'):
line = re.sub('(\w\w...): ',':"\1" =>', line.rstrip())
print(line)
我不知道属性名称是什么,或者在它之前是什么,只有单个:
跟随一个单词(2个或更多个字符)。我很高兴假设在:
之后总会有一个空格,但我似乎遇到了麻烦并且#34;拾起"要替换的属性名称,以后再重复使用。
答案 0 :(得分:1)
以下内容应该有效:
for line in fileinput.input(inplace=1, backup='.bak'):
line = re.sub('(\w+): ', ':\g<1> => ', line.rstrip())
print(line)