用预先指定的值替换字符串的特定部分
Replacing a certain part of string with a pre-specified Value
我对 Puppet 和 Ruby 还很陌生。这个问题很可能之前已经被问过,但我找不到任何相关信息。
在我的人偶代码中,我将从事实主机名中检索一个字符串变量。
$n="$facts['hostname'].ex-ample.com"
我希望得到这样的值
DEV-123456-02B.ex-ample.com,
SCC-123456-02A.ex-ample.com,
DEV-123456-03B.ex-ample.com,
SCC-999999-04A.ex-ample.com
我想执行以下操作。将字符串更改为小写,然后替换
-02、-03 或 -04 到 -01。
所以我的输出会像
dev-123456-01b.ex-ample.com,
scc-123456-01a.ex-ample.com,
dev-123456-01b.ex-ample.com,
scc-999999-01a.ex-ample.com
我认为我需要在 $n
上使用 .downcase
来使所有内容都变成小写。但我不确定如何替换数字。我在考虑 .gsub 或拆分,但不确定如何。我更愿意在一行代码中实现这一点。
如果你真的想要一个单行,你可以 运行 针对每个字符串:
str
.downcase
.split('-')
.map
.with_index { |substr, i| i == 2 ? substr.gsub(/0[0-9]/, '01') : substr }
.join('-')
在不知道您的输入列表采用何种格式的情况下,我不确定如何就如何迭代它提出建议,但也许您已经涵盖了这一点。希望对你有帮助。
如果 -01
--04
部分始终位于同一字符串索引上,您可以使用它来替换内容。
original = 'DEV-123456-02B.ex-ample.com'
# 11 -^
string = original.downcase # creates a new downcased string
string[11, 2] = '01' # replace from index 11, 2 characters
string #=> "dev-123456-01b.ex-ample.com"
请注意,Puppet 和 Ruby 是完全不同的语言,其他答案适用于 Ruby,不适用于 Puppet。
您需要的是:
$h = downcase(regsubst($facts['hostname'], '..(.)$', '01'))
$n = "${h}.ex-ample.com"
notice($n)
注:
- downcase 和 regsubst 函数来自 stdlib。
- 我使用 regsubst 函数进行正则表达式搜索和替换,并替换
..(.)$
- 2 个字符后跟我在字符串末尾捕获的另一个字符,并将其替换为 01 和捕获的字符串。
- 所有这些都被小写了。
我对 Puppet 和 Ruby 还很陌生。这个问题很可能之前已经被问过,但我找不到任何相关信息。
在我的人偶代码中,我将从事实主机名中检索一个字符串变量。
$n="$facts['hostname'].ex-ample.com"
我希望得到这样的值
DEV-123456-02B.ex-ample.com,
SCC-123456-02A.ex-ample.com,
DEV-123456-03B.ex-ample.com,
SCC-999999-04A.ex-ample.com
我想执行以下操作。将字符串更改为小写,然后替换 -02、-03 或 -04 到 -01。
所以我的输出会像
dev-123456-01b.ex-ample.com,
scc-123456-01a.ex-ample.com,
dev-123456-01b.ex-ample.com,
scc-999999-01a.ex-ample.com
我认为我需要在 $n
上使用 .downcase
来使所有内容都变成小写。但我不确定如何替换数字。我在考虑 .gsub 或拆分,但不确定如何。我更愿意在一行代码中实现这一点。
如果你真的想要一个单行,你可以 运行 针对每个字符串:
str
.downcase
.split('-')
.map
.with_index { |substr, i| i == 2 ? substr.gsub(/0[0-9]/, '01') : substr }
.join('-')
在不知道您的输入列表采用何种格式的情况下,我不确定如何就如何迭代它提出建议,但也许您已经涵盖了这一点。希望对你有帮助。
如果 -01
--04
部分始终位于同一字符串索引上,您可以使用它来替换内容。
original = 'DEV-123456-02B.ex-ample.com'
# 11 -^
string = original.downcase # creates a new downcased string
string[11, 2] = '01' # replace from index 11, 2 characters
string #=> "dev-123456-01b.ex-ample.com"
请注意,Puppet 和 Ruby 是完全不同的语言,其他答案适用于 Ruby,不适用于 Puppet。
您需要的是:
$h = downcase(regsubst($facts['hostname'], '..(.)$', '01'))
$n = "${h}.ex-ample.com"
notice($n)
注:
- downcase 和 regsubst 函数来自 stdlib。
- 我使用 regsubst 函数进行正则表达式搜索和替换,并替换
..(.)$
- 2 个字符后跟我在字符串末尾捕获的另一个字符,并将其替换为 01 和捕获的字符串。 - 所有这些都被小写了。