In a PowerShell script, to replace the first occurrence of a string in a file I came with the code below, which keeps track in a variable whether the replacement was made.
Is there a more elegant (idiomatic) way of doing this?
$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
If it is xml, handle it as xml:
SelectSingleNodewill select the first version element. Then replace it’s inner content and save to the new file. Add a check for the inner content being6.1.26.p1if you want to specifically replace only that.