Powershell仅查找并替换第一行CSV

时间:2014-03-17 14:44:40

标签: powershell

我需要读取CSV文件并查找仅替换文件第一行中的某些字符。我使用了foreach-object但是这会处理整个文件。关于如何最好地实现这一点的任何想法。

以下是代码:

Get-Content c:\output.csv | ForEach-Object { $_ -replace "objectGUID", 'StudentID' } | Set-Content c:\output2.csv

2 个答案:

答案 0 :(得分:0)

好的,如果您只想更改文本文件的第一行,Get-Content就足够简单了。

GC c:\output.csv|select -first 1|%{$_ -replace "objectGUID", 'StudentID'}|Out-File C:\Output2.csv
GC C:\output.csv -readcount 1000|Select -skip 1|Out-File C:\Output2.csv -Append

这将仅拉出第一行,替换您想要的文本并将其写入新文件(假设您还没有Output2.csv文件)。之后,它会读取跳过第一行的文件的其余部分,并将其添加到同一文件中。您可以在此之后删除原始文件,并在您认为需要时重命名输出文件。

答案 1 :(得分:0)

这不会解决必须处理整个文件的问题,但如果它是一个非常大的文件,则应该大大减少执行该文件所需的时间。

$Updated = $false

Get-Content c:\output.csv -ReadCount 1000 | 
 ForEach-Object {
  if ($Updated)
    { 
      $_ | Add-Content c:\output2.csv 
    }

  else {
         $_[0] = $_[0] -replace "objectGUID", 'StudentID'
         $_ | Set-Content c:\output2.csv
         $Updated = $true
       }

}

编辑:如果它只有3000行,那就足够了:

$FileContent = Get-Content c:\output.csv 
$FileContent[0] = $FileContent[0] -replace 'objectGUID', 'StudentID'
$FileContent | Set-Content c:\output2.csv