在 powershell 中获取空值

Getting null values in powershell

使用 PowerShell,我有代码可以计算某个值在 .csv 文件中任何位置出现的次数。如果我输入 "\bhello\b",它将计算 "hello" 出现在 .csv 中任何位置的次数。问题是它无法计算空值出现在 CSV 中的次数。它给了我一个比整个 CSV 文件中值的数量更大的数字。

(select-string -Path 'D:\AaronR\Desktop\Book.csv' -Pattern "\b$null\b" -AllMatches | Select-Object -ExpandProperty Matches).Count

您的正则表达式有 3 个问题:

  • 您将模式定义为双引号字符串 \b$null\b,因此 PowerShell 会自动将变量 $null 扩展为空值并将其转换为空字符串(以使其适合字符串) .因此,您实际上匹配了一个模式 \b\b.
  • 字符$在正则表达式中有特殊含义(字符串的结尾),因此必须对其进行转义($)才能匹配文字$字符.
  • 字符 $ 不是单词字符,因此即使在转义 $ 时,模式 \b$word\b 也只会在您有正确的单词字符 之前$(例如something$null)。

如果您想匹配 CSV 中的文字字符串 $null,您需要转义 $ 并将第一个单词边界标记放在 $n 之间。另外,我建议对正则表达式字符串使用单引号,除非您希望在其中扩展变量。

Select-String -Pattern '$\bnull\b' ...