2011-08-23 10 views
6

Hanselminutes post最近 -

私は、現時点ではPowerShellを学ぶしようとしていると私は何が起こっているかのほとんどを理解していることを考える

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

-

  • 文は、「あるtest.txt」の各ラインをループし、現在の行に対して正規表現を実行
  • すべての結果は、照合した後、ソートと重複は
  • 除去されます

私の理解では、ステートメントのこの部分を下に落ちるように見える -

$null = $_ -match '<FancyPants>(?<x>.*)<.FancyPants>'; $matches.x 
  • コードの「$null =」部分が何をしているのか、私はこれは時にマッチしないシナリオを処理するために である疑いがあります返されますが、私はどのように が動作するのか分からないのですか?
  • '$matches.x'は一致するものを返しますか?

答えて

8

はい、-match演算子は、TrueまたはFalseになります。 $nullに割り当てると出力が抑制されます。

(?<>)正規表現の構文では、キャプチャグループが作成されます。この場合、<FancyPants><.FancyPants>の間の任意の文字について、xというキャプチャグループが作成されています。 $matchesには最後の試合の試合情報が含まれています。キャプチャグループは$matches.CaptureGroupNameによって参照できます。

ここには、$Matches変数の内容を確認するための例があります。

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

この例では、試合を参照するために $Matches.MyMatchを使用します。

+0

'$ matches.x'には現在のオブジェクトのマッチが含まれていますが、PSは自動的にすべての' $ matches'結果セットを1つの大きな結果セットに照合しますか? – ipr101

+0

@ ipr101いいえ最後の試合だけを保持します。私は '$ Matches'変数に何が入っているかを見るための例を使って答えを更新しました。 – Rynant

+0

感謝しています。 – ipr101

5

'$ null = ...'は、比較の結果を抑制するために使用されます。

command | Out-Null 

上記のOut-Nullコマンドレットは、出力を抑制するために使用されています。場合によってはこれも表示されることがあります。

[void] (...) 

基本的に、すべての例は出力を無視して同じことを行います。上記のいずれかを使用しないと、結果がパイプラインに書き戻され、パイプラインのさらに下のコマンドから予期しない結果が得られる可能性があります。

+1

も参照してください。http://stackoverflow.com/questions/5260125/whats-the-better-cleaner-way-to-ignore-output-in-powershell –

+0

ありがとうございます。これについてPowerShellチームのポスト(James Brundageから)を覚えていますが、私はそれを見つけることができません。 –

関連する問題