如何删除CSV中以“#”开头或为空的行。电源外壳

时间:2018-08-08 15:29:26

标签: powershell csv import powershell-ise

我有一个CSV文件,其中包含将近4,000多行,并带有随机的空白行和注释,始终以“#”开头。我正在尝试导入CSV文件,同时跳过空白行或以“#”开头的行。我已经尝试过了:

$csvFile = Import-Csv .\example.csv | Where-Object {$_ -notlike '#*'} | Where-Object {$_ -ne ''}

,这不起作用。我也尝试过:

$csvFile = Import-Csv .\example.csv
Get-Content $csvFile | Where-Object {$_ -notlike '#*' | Where-Object {$_ -ne ''} | Set-Content newCSV.csv

这两种情况都会导致文件以所有行导入,并且与原始文件没有任何变化。有一个更好的方法吗?我很困惑。

1 个答案:

答案 0 :(得分:2)

这应该可以完成工作:

Get-Content $csvPath | Where-Object { $_ -notmatch '^#|^$' } | Set-Content $strippedCsvPath

^#匹配以#开头的行,^$匹配空行。

您可以使用以下代码段简化测试:

$csv = 'line1',
'#line2',
'',
'line4'

$csv | Where-Object { $_ -notmatch '^#|^$' }

如果空格(不重要),如果空行表示仅包含空格的行,则可以将RegEx稍微更改为^\s*#|^\s*$,如下所示:

$csv = 'line1',
'#line2',
'',
'    ',
'   #comment',
'line4'

$csv | Where-Object { $_ -notmatch '^\s*#|^\s*$' }