Powershell取代了失败的换行符

Fad*_*man 10 regex powershell

我是powershell的新手.我有一个简单的powershell脚本,只是替换文本但我发现正则表达式替换在生成输出时将我的多行数据源转换为单行文本.我希望保留换行符.这是脚本的愚蠢版本.

$source=(Get-Content textfile.txt)

$process1 = [regex]::Replace($source, "line", "line2")

$process1 | out-file -encoding ascii textfile2.txt
Run Code Online (Sandbox Code Playgroud)

您可以使用这样的简单行创建一个测试文件调用textfile.txt来测试它

line 
line
Some line
More line here
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的事吗?

谢谢,法德里安

Jam*_*ack 20

你的问题是Get-Content返回一个string[](源文件中每行有一个项目),同时[regex]::Replace需要一个字符串.这就是为什么首先将数组转换为字符串,这意味着将所有项目集中在一起.

PowerShell提供了一个-replace操作员,可以更优雅地处理这种情况:

(Get-Content .\textfile.txt) -replace 'line', 'line2' | 
   out-file -encoding ascii textfile2.txt
Run Code Online (Sandbox Code Playgroud)

-replace操作者在阵列的每个项目进行操作单独我它应用于阵列.

是的,它会进行正则表达式匹配和替换.例如:

> (Get-Content .\textfile.txt) -replace '(i|o|u)', '$1$1'
liinee
liinee
Soomee liinee
Mooree liinee heeree
Run Code Online (Sandbox Code Playgroud)

在这里这里阅读更多内容.

  • @Fadrian:我在答案开头添加了一段解释原始问题的段落.希望能帮助到你. (2认同)