使用PowerShell删除CSV文件中的特定行



我放在一起的脚本确实收集了我需要的结果,但我希望使用更干净的字符串。

收集了所有需要的信息后,我将结果导出为csv文件。有三个特定的行我想要删除,所以我重新导入csv文件并删除这些行。这是我当前正在使用的字符串:

#Remove Unneeded Users
import-csv .LDAPCrossWalkTable.csv | Where-Object "User ID" -ne 'test' | Where-Object "User ID" -ne 'process' | Where-Object "User ID" -ne 'app' | export-csv .LDAPCrossWalkTableFinal.csv -Force -NoTypeInformation

是否有一种方法可以通过使用-or操作符而不是管道3次单独使用一次Where-Object cmdlet ?我就是想不出正确的语法。任何输入,它非常感激!谢谢!

更新:谢谢你,奥拉夫,及时的回应和多种选择!我决定继续处理这个字符串:

import-csv .LDAPCrossWalkTable.csv | Where-Object {$_.'User ID' -notin 'test', 'process', 'app'} | export-csv .LDAPCrossWalkTableFinal.csv -Force -NoTypeInformation

是的,有一种方法可以在一个Where-Object中组合多个过滤器。您可以在将结果导出到CSV文件之前应用此过滤器

Where-Object {
$_.'User ID' -ne 'test' -and
$_.'User ID' -ne 'process' -and 
$_.'User ID' -ne 'app'
}

正如@Santiago square的评论所指出的……替代多个-ne的方法是使用-notin

Where-Object {
$_.'User ID' -notin 'test', 'process', 'app'
}

…还是……如下所示:

Where-Object 'User ID' -notin 'test', 'process', 'app'
@Theo推荐的第三种方法是像这样使用正则表达式:
Where-Object 'User ID' -notmatch 'b(test|process|app)b'

或者像这样如果它应该是一个完全匹配

Where-Object 'User ID' -notmatch '^(test|process|app)$'

现在你有很多选择。: -)

相关内容

  • 没有找到相关文章

最新更新