gpt4 book ai didi

csv - 替换由 ConvertTo-Csv cmdlet 生成的字段周围的引号

转载 作者:行者123 更新时间:2023-12-01 01:22:01 25 4
gpt4 key购买 nike

我有一个使用 ConvertTo-Csv cmdlet 导出的制表符分隔的 csv 文件。导出时,它会将每个字段括在引号中。我试图只删除这些引号(我不想删除字段中的引号)。我试过了,但没用。

(Get-Content $root\$filename) | % {$_ -replace('"`t"', "`t")} | Set-Content $root\$filename

值以制表符分隔的“MASSP”形式打印。如果是“M”ASSP,我想去掉外面的双引号并保存字母“M”之后的双引号。

最佳答案

尝试以下操作:

(Get-Content $root\$filename) |
% { ($_ -replace '^"|"$|(?<=\t)"|"(?=\t)', '') -replace '""', '"' } |
Set-Content $root\$filename

<支持>- 而 -replace('"`t"', "`t")在问题中恰好在句法上起作用,这表明您错误地认为 -replace调用需要方法语法;然而,-replace是一个运算符
- 在 regex 参数中,由于您使用的是 单引号 字符串,regex 转义规则适用,因此制表符必须表示为 \t .
- 与我最初的想法不同, 可以在单个管道中读取和写入同一个文件,正如 OP 自己所证明的那样,并由 Frode F. 指出在评论中:附上 Get-Content $root\$filename 圆括号确保文件作为一个整体预先读取并立即关闭,允许Set-Content覆盖它。

该方法使用 2 次传递:

  • 在第一遍中,所有字段-开始 和字段-结束 的双引号都被删除。
    • ^"匹配第一个字段的开头 "
    • (?<=\t)"匹配开头 "除了第一个字段之外的任何字段。
    • "(?=\t)匹配除最后一个字段以外的任何字段的结束引号。
    • "$匹配最后一个字段的结束 " .
  • 在第二遍中,所有字段-内部双引号-被ConvertTo-Csv加倍 - 替换为单个实例。

关于csv - 替换由 ConvertTo-Csv cmdlet 生成的字段周围的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35966776/

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