gpt4 book ai didi

powershell - 在Powershell中将管道定界文件更改为逗号定界

转载 作者:行者123 更新时间:2023-12-02 23:18:31 24 4
gpt4 key购买 nike

我有一个以竖线分隔的.TXT文件。我需要将定界符改为逗号,但仍将文件扩展名保持为.TXT。该文件如下所示:

第1列|第2列

13 | 2019-09-30

96 | 2019-09-26

173 | 2019-09-25

我的脚本使用的是Windows Powershell 5.1版本。

我正在使用以下代码:

$file = New-Object System.IO.StreamReader -Arg "c:\file.txt"
$outstream = [System.IO.StreamWriter] "c:\out.txt"
while ($line = $file.ReadLine()) {
$s = $line -replace '|', ','
$outstream.WriteLine($s)
}
$file.close()
$outstream.close()

输出文件不只是用逗号替换管道,还如下所示:

C,o,l,u,m,n,1,|,C,o,l,u,m,n,2

1,3,|,2,0,1,9,-,0,9,-,3,0

9,6,| 2,0,1,9,-,0,9,-,2,6

1,7,3,|,2,0,1,9,-,0,9,-,2,5

最佳答案

答案的唯一问题是如何尝试替换输入中的|字符:

$s = $line -replace '|', ',' # WRONG



PowerShell的-replace运算符期望将正则表达式(正则表达式)作为其第一个RHS操作数,并且 |是正则表达式元字符(具有特殊含义)[1];要将 用作文字字符,您 必须\ -escape :
# '\'-escape regex metacharacter '|' to treat it literally.
$s = $line -replace '\|', ','

尽管 PowerShell's -replace operator非常灵活,但在诸如此类的简单情况下, 也可以使用[string]类型的.Replace()方法,该方法执行文字字符串替换,因此不需要转义(它也比 -replace更快):
# Use literal string replacement.
# Note: .Replace() is case-*sensitive*, unlike -replace
$s = $line.Replace('|', ',')

[1] |表示正则表达式中的替换,表示任一侧的子表达式都与输入字符串匹配,并且其中一个匹配就足够了;如果您的完整正则表达式只是 |,则它有效地匹配输入中每个字符前后的空字符串,这可以解释您的症状;例如, 'foo' -replace '|', '@'产生 @f@o@o@

关于powershell - 在Powershell中将管道定界文件更改为逗号定界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com