我是powershell的新手。我有一个简单的PowerShell脚本,只是替换文本但我发现正则表达式替换在生成输出时将我的多行数据源转换为单行文本。我希望保留换行符。这是剧本的愚蠢版本。
$source=(Get-Content textfile.txt)
$process1 = [regex]::Replace($source, "line", "line2")
$process1 | out-file -encoding ascii textfile2.txt
您可以使用这样的简单行创建一个测试文件调用textfile.txt来测试它
line
line
Some line
More line here
我错过了一些明显的东西吗?
谢谢, 法德里安
答案 0 :(得分:18)
您的问题是Get-Content
返回 string[]
(源文件中每行有一项),而[regex]::Replace
需要一个字符串。这就是为什么首先将数组转换为字符串,这意味着将所有项目集中在一起。
PowerShell提供了一个-replace
运算符,可以更优雅地处理这种情况:
(Get-Content .\textfile.txt) -replace 'line', 'line2' |
out-file -encoding ascii textfile2.txt
-replace
运算符分别对数组中的每个项进行操作,并将其应用于数组。
是的,它会进行正则表达式匹配和替换。例如:
> (Get-Content .\textfile.txt) -replace '(i|o|u)', '$1$1'
liinee
liinee
Soomee liinee
Mooree liinee heeree