String PowerShell:如何在一行文本中查找单词并修改其背后的数据

String PowerShell:如何在一行文本中查找单词并修改其背后的数据,string,powershell,substring,String,Powershell,Substring,我正在寻找一种方法,在一段文本中找到一个后面有值的单词,然后更新该值。 例如: 文件中多次出现'schema=“anon”maxFileSize=“???????”maxBufferSize=“123”' 我想找到包含maxFileSize的所有行,然后更新未知值??????至123456 到目前为止,我想到了这个: cls $Files = "C:\temp1\file.config","C:\temp2\file.config" $newMaxFile

我正在寻找一种方法,在一段文本中找到一个后面有值的单词,然后更新该值。 例如:

文件中多次出现'schema=“anon”maxFileSize=“???????”maxBufferSize=“123”' 我想找到包含maxFileSize的所有行,然后更新未知值??????至123456

到目前为止,我想到了这个:

cls
$Files = "C:\temp1\file.config","C:\temp2\file.config"
$newMaxFileSize = "123456"

ForEach ($File in $Files) {
    If ((Test-Path $File -PathType Leaf) -eq $False) {
        Write-Host "File $File doesn't exist"
    } Else {
        # Check content of file and select all lines where maxFileSize isn't equal to 123456 yet
        $Result = Get-Content $File | Select-String -Pattern "maxFileSize" -AllMatches | Select-String -Pattern "123456" -NotMatch -AllMatches
        Write-Host $Result
        <#
            ROUTINE TO UPDATE THE SIZE
        #>
    }
}
cls
$Files=“C:\temp1\file.config”,“C:\temp2\file.config”
$newMaxFileSize=“123456”
ForEach($Files中的文件){
If((测试路径$File-路径类型叶)-eq$False){
写入主机“文件$File不存在”
}否则{
#检查文件内容并选择maxFileSize还不等于123456的所有行
$Result=获取内容$File |选择字符串-模式“maxFileSize”-所有匹配项|选择字符串-模式“123456”-不匹配-所有匹配项
写入主机$Result
}
}

但是,我不知道如何找到“maxFileSize”这个词,更不用说如何更新它后面的值了……

假设输入文件实际上是XML,使用以下XPath表达式来定位具有
maxFileSize
属性的所有节点(无论值如何):


如果配置文件是一些没有现成可用解析器的陈旧格式,请使用
-replace
操作符在适当的情况下更新该值:

$Results = @(Get-Content $File) -creplace '(?<=maxFileSize=")[^"]*(?=")','123456'

$Results=@(获取内容$File)-creplace'(?请在您的问题中添加一些数据样本行-真实的数据行,并用格式标记将它们包装起来,以便正确显示。如果是配置文件,您最好找到解析文件的方法(例如
从Json转换过来
,或
[xml](获取内容)
,等等),编辑内存中的对象模型,然后将其保存回配置文件,而不是尝试处理原始文本。配置文件中的换行符、其他空格和转义字符等内容很容易使匹配原始文件内容的任何尝试失败。感谢您的详细解释!我将尝试:)
$Results = @(Get-Content $File) -creplace '(?<=maxFileSize=")[^"]*(?=")','123456'