【问题标题】:Removing extra spaces in PowerShell删除 PowerShell 中的多余空格
【发布时间】:2021-06-13 09:48:02
【问题描述】:

我想使用 PowerShell 删除多余的空格并将它们替换为条目之间的单个逗号,以便我可以将结果转换为工作 CSV 文件以进行进一步分析。

这是我的代码;

Get-Content –path C:\Users\USERNAME\Desktop\results.txt| ForEach-Object {$_ -replace "\s+"  " " } |  Out-File -filepath C:\Users\USERNAME\Desktop\results.csv

在文本文件中,初步结果是这样的:

 entry     entry     entry    (all separated with 5 spaces)

我希望它看起来像这样:

进入,进入,进入

因此 Excel 会将它们放在单独的单元格中。

【问题讨论】:

    标签: powershell scripting


    【解决方案1】:

    您很接近,但您需要替换为 "," 而不是 " "。假设您的文本文件行如下所示。我不知道您是否指的是前导/尾随空格,但没关系。

    " entry entry entry "

    Get-Content –path C:\Users\USERNAME\Desktop\results.txt| ForEach-Object {$_.Trim() -replace "\s+"  "," } |  Out-File -filepath C:\Users\USERNAME\Desktop\results.csv -Encoding ascii
    

    $_.Trim() -replace "\s+" "," 使用 trim 删除外部空格以防止 CSV 中出现额外值以防万一。

    【讨论】:

    • 只是对 Out-File 的警告。默认编码是 Unicode。 ((Get-Content 'entry.txt') -replace ('\s{2,5}', ',')).Trim() | Out-File -Encoding ascii out.csv
    • 如果你想要ASCII编码,你可以将Out-File换成Set-Content,它使用ASCII的默认编码。
    • @kamikatze 很高兴了解编码。在这种情况下,我只是在关注 OP 的输出。
    • 我的 oneliner 也是错误的。首先 Trim(),然后 -replace,否则尾随空格会变成逗号。我没有考虑到这一点。我如何对自己投反对票?:)
    • @kamikatze 正确更新您的评论并使用反引号。准备好后,只需删除不正确的评论。无论如何,我基本上已经在我的答案中有了这个。
    【解决方案2】:

    您可以使用trim 从字符串的开头或结尾删除 个字符(默认为空格)。看看here

    如果您想用正则表达式替换字符,这可以通过另一种方式完成。也看看here

    【讨论】: