开发者

'$null =' in powershell

I saw this Powershell statement in a recent Hanselminutes post -

cat test.txt | foreach-object {$null = $_ -match '<FancyPants>(?<x>.*)<.FancyPants>'; $matches.x} | sort | get-unique

I'm trying to learn Powershell at the 开发者_高级运维moment and I think that I understand most of what is going on -

  • The statement loops through each line of 'test.txt' and runs a regex against the current line
  • All the results are collated and then sorted and duplicates removed

My understanding seems to fall down on this part of the statement -

$null = $_ -match '<FancyPants>(?<x>.*)<.FancyPants>'; $matches.x
  • What is the '$null = ' part of the code doing, I suspect this is to handle a scenario when no match is returned but I'm not sure how it works?
  • Is '$matches.x' returning the matches found?


Yes, the -match operator results in True or False; assigning to $null suppresses the output.

The (?<>) regex syntax creates a capture group. In this case it's creating a capture group called x for any characters between <FancyPants> and <.FancyPants>. $matches contains the match info for the last match. Capture groups can be referenced by $matches.CaptureGroupName.

Here is an example you can use to see what is in the $Matches variable.

'123 Main','456 Broadway'| foreach{$_; $null = $_ -match '(?<MyMatch>\d+)'; ($Matches| ft *)}

In this example you would use $Matches.MyMatch to reference the match.


'$null=...' is used to suppress the result of the comparison. You may have seen something similar, like:

command | Out-Null

In the above, the Out-Null cmdlet is used to suppress the output. In some cases you may see this as well:

[void] (...)

Basically, all examples do the same thing, ignoring the output. If you don't use one of the above the result is going to write back to the pipeline and you may get unexpected results from commands further down in the pipeline.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜