Powershell替换丢失换行符
问题描述:
我是powershell中的新手。我有一个简单的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
我错过了一些东西明显?
感谢, Fadrian
答
你的问题就在这里是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
此作品谢谢。仍然想知道为什么正则表达式的行为方式与.NET环境中实际运行正则表达式不同。 – 2010-04-28 04:25:14
@Fadrian:我在答案的开头添加了一段话来解释你的原始问题。希望能帮助到你。 – Joey 2010-04-28 07:42:14
感谢Johannes +1的回复和+1的帖子 – 2010-04-28 09:34:35