【问题标题】:Import-Csv with regex使用正则表达式导入 CSV
【发布时间】:2013-02-22 09:27:12
【问题描述】:

我想导入 CSV 并使用某些正则表达式过滤掉数据。输入 CSV 示例:

John;Doe;18
Peter;Test;21

我想过滤掉个人姓名,例如:我只想查看姓氏以“d”开头的人以及 20 岁及以上的人。

如何将过滤后的数据写入新数组?这是我到目前为止写的一段代码:

$persons = import-csv -Header "surname", "lastname", "age" -delimiter ";" data.csv
$persons | ForEach-Object {
if $_.lastname -match "^d" {
    #?
} 

非常感谢

【问题讨论】:

    标签: regex powershell csv


    【解决方案1】:

    尝试以下方法:

    $persons = Import-Csv -Header "surname", "lastname", "age" -Delimiter ";" data.csv | where { 
        $_.lastname -match '^d' -and $_.age -ge 20
    }
    

    过滤掉lastname 以“d”开头且年龄大于等于20 的记录。最后,它将结果保存在一个名为$persons的数组中

    【讨论】:

      【解决方案2】:
      $persons | Where-Object {$_.LastName -like "d*" -and $_.Age -gt 20}
      

      【讨论】:

        【解决方案3】:

        试试这个正则表达式

        ^([^;]*);([^;]*);([^;]*)$
        

        用 perl 试过了

        #!/usr/bin/perl
        
        use strict;
        
        while (<>) {
        
            if ( /^([^;]*);([^;]*);([^;]*)$/ ){
                print "first =". $1 . "\n";
                print "last  =". $2 . "\n";
                print "age   =". $3 . "\n";
            }
        }
        

        给出这个输出

        first =John
        last  =Doe
        age   =18
        
        first =Peter
        last  =Test
        age   =21
        

        但是关注正则表达式

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-11
          • 1970-01-01
          • 2015-04-26
          • 1970-01-01
          相关资源
          最近更新 更多