【问题标题】:Powershell Open File and Replace special character + NULLPowershell打开文件并替换特殊字符+ NULL
【发布时间】:2017-05-11 19:03:31
【问题描述】:

我正在尝试打开一个包含许多特殊字符(如“&@*”)的 csv 文件,并将其替换为“_”。我还想将所有“NULL”字符串替换为“”。 完成后,将文件保存到同一位置。

我试过了

$File = Import-Csv "C:\Users\a\Desktop\Al.csv"

foreach ($line in $File)
{
    $line.Replace('[[+*@?()\\.]','_')
    $line.Replace('NULL','')
}

编辑:感谢 cmets 能够做到这一点

(get-content "C:\Users\a\Desktop\Al.csv") -replace ('[[+*@?()\\]','_') -replace('NULL','') | Set-Content "C:\Users\a\Desktop\Al.csv"

【问题讨论】:

  • 到目前为止你尝试过什么?您可以添加遇到问题的代码吗?
  • Import-Csv 不返回行,它返回具有每个 CSV 列属性的 PSObject。 $line.Replace(...) 不会就地更改变量,它会返回一个您没有使用的值。 foreach() 不输出到管道,所以这是一个不好的选择。 (get-content "c:\...\A1.csv" -raw).replace(...).replace(...) | set-content "c:\...\A1.csv"
  • @TessellatingHeckler 说了什么。此外,Replace() 方法可以进行简单的字符串替换。对于正则表达式替换,请使用 -replace 运算符。

标签: powershell csv


【解决方案1】:

最好的办法是读取文件,就好像它只是一个二进制数据块一样,然后替换不需要的字符,然后将其保存回来。

对于您尝试执行的操作而言,它是 CSV 甚至是 TXT 的事实没有任何区别。

例如,Get-content 将读取所有内容,而不是将您限制为 CSV 格式。

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2011-12-28
    相关资源
    最近更新 更多