Powershell replace lose line breaks
powershell, regex
Solution
Your problem here is that `Get-Content` returns a `string[]` (with one item for each line in the source file) while `[regex]::Replace` expects a string. That's why the array will first be converted to a string which simply means lumping together all items.
PowerShell provides a `-replace` operator which will handle this case more gracefully:
(Get-Content .\textfile.txt) -replace 'line', 'line2' |
out-file -encoding ascii textfile2.txt
The `-replace` operator operates on each item of an array individually i it's applied to an array.
And yes, it does regular expression matches and replaces. For example:
> (Get-Content .\textfile.txt) -replace '(i|o|u)', '$1$1'
liinee
liinee
Soomee liinee
Mooree liinee heeree
Read a bit more here and here.
Problem
I am a newbie in powershell. I have a simple powershell script that just replace text but I found that the regex replace turn my multiline data source into a single line text when the output is produced. I want the line breaks to be preserved. Here is the dumb down version of the script. ``` $source=(Get-Content textfile.txt) $process1 = [regex]::Replace($source, "line", "line2") $process1 | out-file -encoding ascii textfile2.txt ``` You can create a test file call textfile.txt with simple lines like this to test it ``` line line Some line More line here ``` Have I missed something obvious? Thanks, Fadrian