2009-12-09 16 views
17

Powershellのテキストファイルの途中にコンテンツを追加したいと思います。私は特定のパターンを探していて、その後にそのコンテンツを追加します。これはファイルの途中にあることに注意してください。Powershellのテキストファイルにコンテンツを挿入する

私が現在持っていることは次のとおりです。

(Get-Content ($fileName)) | 
     Foreach-Object { 
      if($_ -match "pattern") 
      { 
       #Add Lines after the selected pattern 
       $_ += "`nText To Add" 
      } 
     } 
    } | Set-Content($fileName) 

しかし、これは動作しません。 $ _は不変であるか、+ =演算子が正しく変更しないので、私は仮定していますか?

$ _にテキストを追加する方法は、次のSet-Contentコールに反映されますか?

+1

唯一の問題は、何も出力していないことです。 if(){}ブロックの後に$ _を追加するだけです... – Jaykul

答えて

29

余分なテキストを出力するだけです。

(Get-Content $fileName) | 
    Foreach-Object { 
     $_ # send the current line to output 
     if ($_ -match "pattern") 
     { 
      #Add Lines after the selected pattern 
      "Text To Add" 
     } 
    } | Set-Content $fileName 

PowerShellは各文字列をあなたのために終端させるので、余分な `` n 'は必要ありません。私はそれはかなり単純明快だと思う

(gc $fileName) -replace "pattern", "$&`nText To Add" | sc $fileName 

:これはどのように

10

。唯一の明白でないことは、 "$ &"です。これは、 "パターン"にマッチしたものを指します。詳細:http://www.regular-expressions.info/powershell.html

+0

良い提案です。私がしなければならないことに対しては機能しませんが、より一般的なケースでは機能します。 – Jeff

+0

@ジェフ、私はあなたのものと機能的に同等であると信じています。 –

1

この問題は、配列を使用することで解決できます。テキストファイルは文字列の配列です。すべての要素はテキスト行です。

$FileName = "C:\temp\test.txt" 
$Patern = "<patern>" # the 2 lines will be added just after this pattern 
$FileOriginal = Get-Content $FileName 

<# create empty Array and use it as a modified file... #> 

[String[]] $FileModified = @() 

Foreach ($Line in $FileOriginal) 
{  
    $FileModified += $Line 

    if ($Line -match $patern) 
    { 
     #Add Lines after the selected pattern 
     $FileModified += "add text' 
     $FileModified += 'add second line text' 
    } 
} 
Set-Content $fileName $FileModified 
関連する問題