企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 使用正则表达式替换 > Change is inevitable, except from vending machines. > > — Robert C. Gallagher Puppet 的 regsubst 函数提供了一种处理文本的简单方法, 用于在字符串中查找和替换,或者从字符串提取匹配的模式。 例如,我们通常需要对从 facter 或者从外部程序获得的数据做这样的处理。 在本例中将会看到如何使用 regsubst 提取一个 IP 地址的前三个字节 (即网络地址部分,假定此 IP 地址是一个 C 类地址)。 #### 操作步骤 1. 在配置清单中添加如下的代码: ``` $class_c = regsubst($ipaddress, "(.*)\..*", "\1.0") notify { $ipaddress: } notify { $class_c: } ``` 2. 运行 Puppet: ``` notice: 10.0.2.15 notice: 10.0.2.0 ``` #### 工作原理 regsubst 函数需要携带三个参数: 源字符串、匹配模式(pattern)和替换结果。 在本例中,我们指定的源字符串是 $ipaddress,这恰好是: ``` 10.0.2.15 ``` 我们还指定了 (.**)\..** 作为匹配模式并且 \1.0 作为替换结果。 匹配模式将匹配整个 IP 地址,捕获的前三个字节放在一对圆括号内。 被捕获的文本可以在替换结果中使用 \1 来引用。 被匹配的全部文本(本例中是字符串 “10.0.2.15”)将使用替换结果(replacement)来替换。 这里是 \1 (从源字符串中捕获的文本)跟上字符串 .0, 最终获得:10.0.2.0。 #### 更多用法 匹配模式中可以使用任何正则表达式,与在 if 语句中使用的正则表达式 (Ruby) 语法一致。 #### 参见本书 * 第 4 章的 [导入动态信息](#ch04sec09) 一节 * 第 4 章的 [获得系统的环境信息](#ch04sec08) 一节 * 第 3 章的 [在 if 语句中使用正则表达式](#ch03sec08) 一节