Powershell replace lose line breaks
I am a newbie in power开发者_如何学Pythonshell. 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
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.
精彩评论