3

私はPerlでこの種のものを数え切れないほど使用しました:

for ( $someVariable ) {
    s/findthis/replaceitwiththis/g;
    s/findthat/replaceitwithsomethingelse/g;
}

の値$someVariableは一時的に$_あり、変数は「インプレース」で更新されます。新しい置換コマンドはそれぞれ、変数の内容を更新/上書きし続けます。これは、単純なループで多くの変更を行うための便利でコンパクトな方法です。

Powershellには、この「for」の使用に相当するものがありますか?

@neoliskからの応答に続いてコメントを追加し、フォーマットを使用できるようにします。

$s = 'abcde'
$s | foreach {
    $_ -replace 'a','x'
    $_ -replace 'e','z'
}
write-host "And: $s"

画面に表示される結果:

xbcde
abcdz
And: abcde

また、などを試し$_ = $_ -replace 'a','x'ました。「インプレース」置換を取得するには、ここでいくつかの追加の構文が必要です。

@Nachtからの返信に続いてさらに編集します。これは機能しますが、私はバックティックに夢中ではありません。

$s = 'now is the time for all good individuals blah blah'
Write-Host $s
$s = $s `
  -replace "now", 'NEVER' `
  -replace 'time', 'moment' `
  -replace "blah\s+blah", '-- oh, WHATEVER'
Write-Host $s

出力:

now is the time for all good individuals blah blah
NEVER is the moment for all good individuals -- oh, WHATEVER
4

3 に答える 3

3

Powershell ではこれとまったく同じですが、構文が少し異なります。

$someVariable | foreach {
    Write-Host $_;
}

インプレース置換を行いたい場合$_は、不変、つまり読み取り専用であることに注意してください。適切な方法は、パイプラインで新しい文字列を出力し、別の変数に収集することです。そのため、例では次のようになります。

$s = 'abcde' 
$newS = $s | foreach {
    $_ -replace 'a','x' -replace 'e','z'    
}
write-host "And: $newS";
于 2012-11-13T02:53:00.410 に答える
0

これはあなたが探しているものですか?

$s = 'abcde'
$s = $s -replace 'a','x' -replace 'e','z'
write-host "And: $s"

出力:

And: xbcdz

次のように複数の行で実行することもできます。

$s = 'abcde'
$s = $s -replace 'a','x'
$s = $s -replace 'e','z'
write-host "And: $s"

各行が個別に出力されるため、次は機能しません。

$s | foreach {
    $_ -replace 'a','x'
    $_ -replace 'e','z'
}

代入ステートメントは何も出力しないため、次は機能しません。

$s | foreach {
    $_ = $_ -replace 'a','x'
}
于 2012-11-13T03:56:28.287 に答える
0

このように自分の質問に答えることがここで適切かどうかはわかりません。そうでない場合は、アドバイスしてください。いくつかのアプローチを要約するには(すべてチェック済み):

$s = 'abcde' (likewise for all below)
$s | foreach {
    $_ `
    -replace 'a', 'X' `
    -replace 'e', 'Z'
}

XbcdZ実行中に表示します。$s は変更されていません

$s = $s `
    -replace 'a', 'X' `
    -replace 'e', 'Z'

$s は「その場で」更新されます。価値は今XbcdZ

$t = $s | foreach {
    $_ `
    -replace 'a', 'X' `
    -replace 'e', 'Z'
}

$s は変更されません。$t の値:XbcdZ

$t = $s `
  -replace 'a', 'X' `
  -replace 'e', 'Z'

$s は変更されません。$t の値:XbcdZ

($t = $s) `
  -replace 'a', 'X' `
  -replace 'e', 'Z'
Write-Host "`$s: $s -- `$t: $t"

何が起こるかを確認するために括弧を追加しました。
どちらの変数の値も変化しません。Write-Host を介して出力される行のXbcdZにコンソールに出力されます。

于 2012-11-13T22:39:01.647 に答える