目标是想在WindowsPS下修改一个zbx配置文件参数。但是在PS下没有文本编辑工具。
所以我想了一个曲线的办法,先遍历文件的内容,然后替换匹配到的目标,再另存为一个新的文件。就像下面这个样子
PowerShell
Get-Content ".\zabbix_agentd.win.conf" | foreach-object {$_ -replace ("10.138.90.148","10.138.90.204")} | Out-File .\zbxconf
为什么不直接Out-File到原来的文件?因为已经在Get-Content进程里打开了,不允许覆盖。另存好以后,cp覆盖原文件就行了。
为什么不用Set-Content来另存?那样另存的是空文件。如果覆盖原文件,原文件会被清空。原因为什么我还没有搞清楚。
另存的文件一定要转码一次,保存成UTF8格式,不然的话文件编码可能会出问题,如果是配置文件出现编码问题服务会起不来。
PowerShell
Get-Content ".\zabbix_agentd.win.conf" | foreach-object {$_ -replace ("10.138.90.148","10.138.90.204")} | Out-File .\zbxconf -Encoding UTF8
另存文件时也要转码。
PowerShell
Get-Content .\zbxconf -Encoding UTF8 | Set-Content -Path .\zabbix_agentd_win.conf -Encoding UTF8