【问题标题】:Dynamically replacing file content动态替换文件内容
【发布时间】:2018-01-30 15:20:51
【问题描述】:

我必须读取一个属性文件(比如说prop.txt)并动态更新它。

内容如下所示。

server.names=xyz[500],server2[500],test[500]

我想用正确的值替换 server.names= 之后的任何内容,例如:

server1.company.com[500],server2.company.com[500],server3.company.com[500]

我尝试了下面的命令,但它正在替换 server.names=。我想替换server.names=的值

(Get-Content $path).Replace("server.names=",$NewServerNames) | Set-Content $path

知道如何替换server.names= 的值吗?

【问题讨论】:

  • (获取内容 $path).Replace("server.names=",$NewServerNames) | Set-Content $path ...这是替换“server.names =”,这不是我想要的。
  • 很高兴知道,请edit it into your question 并解释它如何未能解决您的问题
  • 所以你想用他们的 FQDN 替换服务器名称?这就是它的样子。
  • 是的。当我安装产品时,我在属性文件中获取示例值。现在我用准确的服务器名称替换示例值。

标签: powershell replace


【解决方案1】:

你很接近,但你的语法是关闭的。此解决方案利用正则表达式来捕获原始密钥:

$Pattern = 'server\.names='

Get-Content -Path $Path |
    ForEach-Object {
        If ($_ -match $Pattern)
        {
            $_ -replace "($Pattern).*","$1$NewServerNames"
        }
        Else
        {
            $_
        }
    } |
    Set-Content -Path $Path

【讨论】:

  • 我做了一点改动,它按预期工作....................... (Get-Content -Path $Path) -replace '(server\.names= ).*',"server.names=$1$NewServerNames" |设置内容-路径 $Path
  • 这不会像你认为的那样工作@jks。 $1 是对捕获组的反向引用,因此您将相同的文本复制两次。
  • 如果我没有在替换字符串前面添加 server.names,我只会看到服务器名称,但看不到 server.names= 服务器名称。不太确定如何错过反向引用值
猜你喜欢
  • 2012-11-02
  • 2016-06-09
  • 2012-01-25
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2017-05-25
相关资源
最近更新 更多