《Puppet实战手册》——2.12 使用正则表达式进行替换

本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.12节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.12 使用正则表达式进行替换

Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。

在这个例子中,读者将看到如何使用regsubst提取IPv4地址的前三位(网络部分,假设它是一个C类地址)。

操作步骤
按照下面的步骤来完成示例。

1. 在配置清单中添加下面的代码:

$class_c = regsubst($::ipaddress, '(.*)\..*', '\1.0')
notify { "The network part of ${::ipaddress} is
 ${class_c}": }

2. 运行Puppet:

ubuntu@cookbook:~/puppet$ papply 

Notice: The network part of 10.96.247.132 is 10.96.247.0 

Notice: /Stage[main]/Admin::Test/Notify[The network part of 
10.96.247.132 is 10.96.247.0]/message: defined 'message' as 'The 
network part of 10.96.247.132 is 10.96.247.0' 

Notice: Finished catalog run in 0.09 seconds

工作原理
regsubst至少需要三个参数:source(输入源)、pattern(匹配模式)和replacement(替换内容)。在例子中,指定的source字符串作为$:: ipaddress,而这台机器上的值如下:

10.96.247.132
指定的pattern如下:

(.*)\..*
而replacement的内容如下:

\1.0
pattern将匹配整个IP地址,捕获圆括号内的IP地址前三位。捕获的文本可以通过1的形式在replacement字符串中使用。

所有匹配的文本(本示例中是整个字符串)都会被参数中指定的replacement所替换。在这里是1(从source字符串中捕获的文本),后面跟随字符串.0,它的计算结果如下:

10.96.247.0
当然,可以通过其他方式得到相同的结果,包括:

$class_c = regsubst($::ipaddress, '\.\d+$', '.0')
更多参考
pattern可以是任意的正则表达式,与if语句中正则表达式使用相同的(Ruby)语法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值