regex - Powershell替换丢失换行符

标签 regex 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

我是否错过了明显的事情?

谢谢,
法德良

最佳答案

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

关于regex - Powershell替换丢失换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726599/

相关文章:

删除某个重复的键左侧的所有文本

c# - C# Powershell Cmdlet 中互斥参数集 : Why is this ambiguous?

azure - 如何使用powershell获取所有Azure订阅和资源的列表(以特定格式)

javascript - 匹配另外两个不同字符串之间的字符串

java - 如何使用正则表达式获取java中类列表字符串中的每个字段?

javascript - 正则表达式 - 查找所有出现的情况,但不在引号内

node.js - 如果 Windows PowerShell 的颜色在运行程序后损坏,如何重置它们?

xml - 查找 xml 节点的完整 xpath

PowerShell 测试连接 "On first response"

Java字符串如何替换 "with\"以转义JSON?