如何使用PowerShell将|替换为逗号,解决替换异常以正确保存为CSV
PowerShell将竖线分隔文本转为CSV的实现方法
异常原因
使用-replace出现逐字符插入逗号的问题,根源是-replace运算符默认采用正则匹配规则,|是正则语法中代表「或」逻辑的特殊元字符,未做转义处理时,匹配规则会识别所有空字符位置,最终导致逗号被插入到每两个相邻字符之间。
可用实现方案
方案1:正则模式下转义特殊字符
继续使用-replace时,对|做正则转义即可:在字符前加反斜杠\,也可以调用[regex]::Escape()方法自动处理特殊字符转义。
完整操作代码:
# 读取原始竖线分隔文本,将路径替换为实际文件路径 $rawText = Get-Content -Path "源文件路径.txt" -Raw # 转义竖线后执行替换 $csvText = $rawText -replace '\|', ',' # 保存为UTF8编码的CSV文件 $csvText | Set-Content -Path "输出结果.csv" -Encoding UTF8
针对给出的示例文本,执行后输出的CSV内容为:
CF Hi,Cap Launch,Sales To CF Hi,Cap Launch,Sales To,Systems
方案2:使用字面量替换方法(无需处理转义)
如果不想处理正则转义逻辑,可以直接调用.NET字符串类型自带的.Replace()方法,该方法为纯字面量匹配,不会识别任何正则特殊字符,写法更直接:
$rawText = Get-Content -Path "源文件路径.txt" -Raw $csvText = $rawText.Replace('|', ',') $csvText | Set-Content -Path "输出结果.csv" -Encoding UTF8
注意:以上简单替换方案仅适用于原始文本本身不包含逗号的场景。如果原文本字段内存在逗号,直接替换会导致CSV列错位,需要额外给包含特殊字符的字段包裹双引号做合规转义。
内容的提问来源于stack exchange,提问作者AshishJ
相关产品推荐
相关产品推荐

