string - 文本替换 - 字符串和空格
问题描述
我的公司部署了 Splunk 来收集日志并报告系统更改。Splunk 使用两个文件 - inputs.conf 和 server.conf 来跟踪现有主机名并将其报告给 Splunk 控制。
如果主机名更改(在我们的环境中很常见),系统会报告“Broken Host Sanity check”,要求我们登录每个系统并用新主机名替换旧主机名。
对于现场有 1000 个系统,这很困难。
我想自动化这个过程,但我编写的脚本有问题(见下文)。
输入和服务器都对 .conf 文件使用这种格式(.conf 只是一个带有 .conf 扩展名的 txt 文件)。
主机 = 系统名
下面的脚本当前将读取文本文件,而不是替换“systemname”,而是将更改附加到现有值的末尾。IE。而不是hostname1
⇔hostname2
它确实Hostname2Hostname1
。
$InputsOLD = "host = *"
$InputsNEW = "host = $Env:COMPUTERNAME"
Get-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\inputs.conf" |
Foreach-Object {$_ -replace "$InputsOLD","$InputsNEW"} |
Set-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\inputs_1.conf"
$ServerOLD = "serverName = *"
$ServerNew = "serverName = $Env:COMPUTERNAME"
Get-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\server.conf" |
Foreach-Object {$_ -replace "$ServerOLD","$ServerNew"} |
Set-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\server_1.conf"
解决方案
-replace
运算符基于正则表达式进行匹配。所以你的匹配表达式:
"host = *"
将在匹配第一个“host =”(不包括主机名)后结束匹配,这就是被替换的内容,之后所有内容都完好无损。要在匹配表达式中包含主机名,请使用以下正则表达式:
"host = .*"
推荐阅读
- zend-framework3 - 如何在 ZF3 中初始化模块(用户)?
- vba - 如何在 Visio 中为批量“适合绘图”操作编写宏?
- android - 两个生产者一个表面
- xml - 为小部件 Magento2 插入新容器选项
- vue.js - 对 Vee-Validate 使用 v-model 而不是 name 属性
- javascript - 通过 cy.request 在 mailcatcher 中获取电子邮件
- facebook - Facebook分享更改域名
- ios - iOS - iPhone 应用程序无法放大以适应 iPad 屏幕
- html - 如何从跨度标签中抓取在线数据
- c# - “如何修复 webhook 接收器的 hasura 中的‘发生错误’错误”