【问题标题】:Import-CSV in PowerShell hides double quotesPowerShell 中的 Import-CSV 隐藏双引号
【发布时间】:2015-10-12 05:52:34
【问题描述】:

我导入一个文件并像这样处理它的内容:

$msg = Import-Csv .\content -Delimiter "`t" | Select msg | Format-Table -HideTableHeaders | Out-String | %{$_ -replace "\n"}

在这种情况下,内容文件如下所示:

id  name    when    ip  msg user_id
 50 Felix   2015-07-22 12:51:04 10.1.100.6  "ein link":www.link.de  89

但是 $msg 会返回以下内容:

ein link:www.link.de

当我有这样的内容文件时:

id  name    when    ip  msg user_id
 50 Felix   2015-07-22 12:51:04 10.1.100.6  dies ist "ein link":www.link.de 89

$msg 是正确的:

dies ist "ein link":www.link.de

Import-CSV 仅在双引号位于文本开头时隐藏它们。

我正在使用 PowerShell 5.0

你能帮帮我吗?

谢谢

【问题讨论】:

    标签: csv powershell quotes


    【解决方案1】:

    试试这个也许有效:

    $msg = Get-Content .\content.csv |
           ForEach-Object { $_ -replace ('"','"""') } | 
           ConvertFrom-CSV -Delimiter "`t" | 
           Select msg | Format-Table -HideTableHeaders | 
           Out-String | %{$_ -replace "\n"}
    

    【讨论】:

    • 感谢您的回答。该解决方案解决了开头双引号的问题。但是现在,当我在文本中间的某处加上双引号时,我会得到如下输出: dies ist """ein link""":www.link.de
    • @FLX 好的,我已经对其进行了测试,并且使用您的示例有效,但是因为我无法测试我写的任何案例,我写了“也许它有效”;)。您可以尝试用单引号替换双引号,这种方式在我的测试中有效。
    • 不幸的是,就我而言,不可能使用单引号代替双引号。还有其他解决方案吗?
    • @FLX 也许使用正则表达式可以匹配:www 之前的所有内容,并将双引号添加到匹配项中。
    • 好的。现在我将内容文件推送到一个变量中并像这样处理它: $content -replace '^(.+?)\t"(.+?)"(.+?)$', '$1t"""$2"$3'; So I add two double quotes which can be removed by import-csv. But I don't know how to insert the tab back. t回馈`t ...
    猜你喜欢
    • 2020-05-23
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2022-10-17
    相关资源
    最近更新 更多