【问题标题】:Powershell replace lose line breaksPowershell替换丢失换行符
【发布时间】:2010-04-28 15:41:29
【问题描述】:

我是 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

我是否遗漏了一些明显的东西?

谢谢, 法德里安

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    您的问题是 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
    

    阅读更多 herehere

    【讨论】:

    • 谢谢。仍然想知道为什么正则表达式的行为方式与在 .NET 环境中实际运行正则表达式不同。
    • @Fadrian:我在答案的开头添加了一段解释你原来的问题。希望对您有所帮助。
    • 感谢 Johannes +1 的回复和 +1 的帖子
    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多