开发者

Powershell replace lose line breaks

开发者 https://www.devze.com 2022-12-28 04:48 出处:网络
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 t

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消