在 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' ...
使用 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' ...