単純なテキストファイルがあり、ファイルコンテンツの一部を置き換えるためのPowerShellスクリプトが必要です。
私の現在のスクリプトは次のとおりです。
$content = Get-Content -path "Input.json"
$content -Replace '"(\d+),(\d{1,})"', '$1.$2' | Out-File "output.json"
このように、コンテンツ変数なしで1行で書くことは可能ですか?
Get-Content -path "Input.json" | ??? -Replace '"(\d+),(\d{1,})"', '$1.$2' | Out-File "output.json"
$ content変数なしで2番目のコマンドで最初のget-contentコマンドレットの出力を使用する方法がわかりませんか?自動PowerShell変数はありますか
パイプラインでの交換よりも多くの交換を行うことは可能ですか?.
Get-Content -path "Input.json" | ??? -Replace '"(\d+),(\d{1,})"', '$1.$2' | ??? -Replace 'second regex', 'second replacement' | Out-File "output.json"
はい、-replace
は期待通りに配列で動作するため、パイプラインは必要ありません(そして演算子を連鎖させることができます)。
(Get-Content Input.json) `
-replace '"(\d+),(\d{1,})"', '$1.$2' `
-replace 'second regex', 'second replacement' |
Out-File output.json
(読みやすくするために改行が追加されました。)
Get-Content
呼び出しを囲む括弧は、-replace
演算子がGet-Content
への引数として解釈されるのを防ぐために必要です。
このように、コンテンツ変数なしで1行で書くことは可能ですか?
はい:ForEach-Object
(またはそのエイリアス%
)を使用してから$_
を使用して、パイプライン上のオブジェクトを参照します。
Get-Content -path "Input.json" | % { $_ -Replace '"(\d+),(\d{1,})"', '$1.$2' } | Out-File "output.json"
パイプラインでの交換よりも多くの交換を行うことは可能ですか?.
はい。
Foreach-Object
セグメントを追加するだけです。-replace
は結果を返すので、単一の式で連鎖できます。
($_ -replace $a,$b) -replace $c,$d
括弧は不要だと思いますが、読みやすくするためだと思います:連鎖演算子(特に一致/置換が自明でない場合)よりも明らかに多いとは限りません。