替换文件中第一次出现的字符串

时间:2011-09-16 19:15:18

标签: powershell

在PowerShell脚本中,为了替换文件中第一次出现的字符串,我随附了下面的代码,该代码会跟踪变量是否已进行替换。

这样做有更优雅(惯用)的方法吗?

$original_file = 'pom.xml'
$destination_file =  'pom.xml.new'

$done = $false
(Get-Content $original_file) | Foreach-Object {
    $done
    if ($done) {
        $_
    } else {
        $result = $_ -replace '<version>6.1.26.p1</version>', '<version>6.1.26.p1-SNAPSHOT</version>'
        if ($result -ne $_) {
            $done = $true
        }
        $result
    }
} | Set-Content $destination_file

2 个答案:

答案 0 :(得分:5)

因此,假设您有一个名为Test.txt的文件,其内容为:

one
two
four
four
five
six
seven
eight
nine
ten

并且您想要将第一个四个实例更改为三个:

$re = [regex]'four'
$re.Replace([string]::Join("`n", (gc C:\Path\To\test.txt)), 'three', 1)

答案 1 :(得分:3)

如果是xml,请将其处理为xml:

$xml = [xml](gc $original_file)
$xml.SelectSingleNode("//version")."#text" = "6.1.26.p1-SNAPSHOT"
$xml.Save($destination_file)

SelectSingleNode将选择第一个版本元素。然后替换它的内部内容并保存到新文件。如果您只想专门替换内容,请添加对6.1.26.p1内部内容的检查。