【问题标题】:Replace string in an imported CSV file替换导入的 CSV 文件中的字符串
【发布时间】:2017-08-31 00:27:16
【问题描述】:

我需要导入一个 CSV 文件,然后将完整的用户名 domain\username 替换为 username

以下几行有效,但我只收到修改后的用户名作为输出,而不是完整文件。

您能建议吗?

$TestFile = Import-Csv .\file.csv 
$NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\\',''}

【问题讨论】:

    标签: powershell powershell-4.0


    【解决方案1】:

    使用ForEach-Object 循环处理 CSV 输入时,您需要将数据输出回管道。此外,-replace 运算符不会就地修改变量或属性。它获取值,完成工作,并将修改后的字符串输出到成功输出流。如果要更新属性,则需要将修改后的值分配回该属性。

    改变这个:

    $TestFile = Import-Csv .\file.csv 
    $NewFile = $TestFile | ForEach-Object {$_."Username" -replace 'domain\\',''}
    

    进入这个:

    $NewFile = Import-Csv .\file.csv | ForEach-Object {
        $_.Username = $_.Username -replace 'domain\\', ''      # update username
        $_                                    # feed data back into the pipeline
    }
    

    代码会做你想做的事。

    【讨论】:

      【解决方案2】:

      您可以对字符串数据进行替换,然后使用ConvertFrom-Csv将其转换为对象。

      $TestFile = (Get-Content .\file.csv) -replace 'domain\\',''
      $NewFile = ConvertFrom-Csv $TestFile
      

      【讨论】:

      • 好答案,请记住模式替换是全局的(即,不特定于列)。
      • 老兄如何使其特定于列?
      • @SumithChalil 这与此不同,因此您需要提出自己的问题。
      【解决方案3】:

      这是一种方法 - 从输入表中获取列名,迭代表中的每一行,并输出具有所需更改的新自定义对象。

      $table = Import-Csv "Test.csv"
      
      # Get column names
      $columnNames = ($table | Select-Object -First 1).PSObject.Properties |
        Select-Object -ExpandProperty Name
      
      # Iterate each row in the table
      foreach ( $row in $table ) {
        $outputObject = New-Object PSObject
        foreach ( $columnName in $columnNames ) {
          if ( $columnName -eq "Username" ) {
            $outputObject | Add-Member NoteProperty "Username" ($row.Username.Split('\')[1])
          }
          else {
            $outputObject | Add-Member NoteProperty $columnName $row.$columnName
          }
        }
        $outputObject
      }
      

      要创建一个新的 CSV 文件作为输出,请将上述代码放入脚本中并通过管道传送到 Export-Csv

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2018-09-11
        • 2021-08-09
        • 2023-03-21
        相关资源
        最近更新 更多