来自主机名的Puppet动态变量

时间:2015-12-04 21:01:33

标签: regex puppet

我正在尝试从ec2的主机名中获取动态变量。主机名遵循这种模式

us-east-1b-application-type-environment-138-10.domain.com

我希望我的变量最终看起来像这样

application-type-environment

使用此

$variable = regsubst($hostname, '/[a-z]{1}[0-9]{1}-([^-]+)-[0-9]{1,3}/', '')

我最终得到了这个

us-east-1b-application-type-environment-138-10

我怎样才能得到预期的结果?

1 个答案:

答案 0 :(得分:2)

regsubst中不需要正则表达式分隔符。您需要匹配整个字符串才能删除它,并且只保留您需要的内容。技术包括匹配您不想保留的内容以及匹配和捕获您想要的结果。

您可以使用

regsubst($hostname, '^[^0-9]*[0-9][a-z]-(.*?)-[0-9]{1,3}.*$', '\1')

我认为你正试图弄清楚第一个[数字] [小写字母]块和三位数块之间的内容。

这是regex demo

表达式的细分:

  • ^ - 行首(如果是字符串的开头,则替换为\A
  • [^0-9]* - 0个或更多个非数字符号(除数字外,全部可以替换为\D*
  • [0-9][a-z]- - 一个数字后跟一个小写字母后跟-(与\d[a-z]相同)
  • (.*?) - 匹配并捕获任何字符,但在最接近之前尽可能少地换行......
  • -[0-9]{1,3} - 1到3位数字(与\d{1,3}相同)
  • .*$ - 0个或更多任何字符,但换行符直到行尾(如果表示字符串结尾,则替换为\z)。