2013-04-27 45 views
22

私はシンプルなテキストファイルを持っており、ファイルコンテンツの一部を置き換えるためにはpowershellスクリプトが必要です。テキストファイルの内容を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" 

私は$コンテンツ変数なしで2番目のコマンドで最初に取得・コンテンツコマンドレットの出力を使用することができる方法がわかりませんか?自動powershell変数がありますか?

パイプラインでより多くの置換を行うことは可能ですか?

Get-Content -path "Input.json" | ??? -Replace '"(\d+),(\d{1,})"', '$1.$2' | ??? -Replace 'second regex', 'second replacement' | Out-File "output.json" 

答えて

37

はい、あなたは1行でそれを行うことができますし、あなたがそれを行うことを期待するようにしてもアレイ上-replace作品として、パイプラインを必要としない(そして、あなたは演算子をチェーンすることができます):

(Get-Content Input.json) ` 
    -replace '"(\d+),(\d{1,})"', '$1.$2' ` 
    -replace 'second regex', 'second replacement' | 
    Out-File output.json 

(改行は、読みやすくするために追加されました。)Get-Contentコール周り

括弧はGet-Contentへの引数として解釈さ-replaceオペレータを防ぐために必要です。

+0

ありがとう!それは私が欲しいものです! –

+0

"a"、 "b" -replace( '\ n'、 'a') 'は一度に1行ずつ実行されますが、' b 'は返されます。 "\" n "、" b "-replace( '\ nb'、 'a')' \ n "、" b "を返します。 –

+1

@ TheRedPea:すべての行を同時に使用することができます代わりに 'Get-Content-Raw'を使用してください。その後、1つの文字列を返します。 – Joey

4

それはこのように、コンテンツ変数せずに1行でそれを書くことは可能ですか?

はい:パイプライン上のオブジェクトを参照するためにForEach-Object(またはそのエイリアス%)を使用して、$_

Get-Content -path "Input.json" | % { $_ -Replace '"(\d+),(\d{1,})"', '$1.$2' } | Out-File "output.json" 

は、パイプライン内の1つ以上の置換を行うことが可能です。

はい。

  1. 上記のとおり、Foreach-Objectセグメントを追加するだけです。 -replaceとして
  2. が結果を返す、彼らは、単一の式に連鎖させることができます:

    ($_ -replace $a,$b) -replace $c,$d 
    

    私は括弧が必要とされていない疑いがあるが、私は、彼らはそれが読みやすく思う:数よりも明らかに より(特に一致/置換が重要でない場合) は明確ではありません。

+0

解決方法は、Get-Contentコマンドletのかっこでのみ機能します。 (Get-Content -path $ inputFile)| '、' $ 1 ' - ' '、' '、' $ 1 'を置き換えます。'、 '$ 1' '} | Out-File $ outputFile –

+2

@JanBaerこれらのカッコは、 '$ InputFile'が' $ OutputFile'と同じ場合にのみ必要です。 – Richard

+0

括弧が入力ファイルへの書き込みを可能にする理由についての参考資料がありますか?これはまさに私が必要としたユースケースでしたが、わかりません。 –

関連する問題