2009-12-09 48 views
17

Tôi muốn thêm nội dung vào giữa tệp văn bản trong Powershell. Tôi đang tìm kiếm một mẫu cụ thể, sau đó thêm nội dung sau đó. Lưu ý đây là ở giữa của tập tin.Chèn nội dung vào tệp văn bản trong Powershell

Những gì tôi đang có là:

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

Tuy nhiên, điều này không làm việc. Tôi giả sử bởi vì $ _ là bất biến, hoặc bởi vì toán tử + = không sửa đổi nó một cách chính xác?

Cách để nối văn bản vào $ _ sẽ được phản ánh trong cuộc gọi Set-Content sau đây?

+1

Vấn đề duy nhất với bản gốc của bạn là bạn không xuất ra bất kỳ thứ gì. Chỉ cần thêm $ _ sau if() {} block ... – Jaykul

Trả lời

29

Chỉ cần xuất văn bản bổ sung, ví dụ:

Bạn không cần thêm `` n` vì PowerShell sẽ chấm dứt từng chuỗi cho bạn.

10

Làm thế nào về điều này:

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

Tôi nghĩ rằng đó là khá thẳng về phía trước. Điều không rõ ràng duy nhất là "$ &", đề cập đến những gì đã được khớp với "mẫu". Thông tin thêm: http://www.regular-expressions.info/powershell.html

+0

Đề xuất tốt. Không làm việc cho những gì tôi cần làm nhưng sẽ làm việc trong một trường hợp tổng quát hơn. – Jeff

+0

@ Jeff, tôi tin nó có chức năng tương đương với cái của bạn. –

1

Sự cố này có thể được giải quyết bằng cách sử dụng mảng. Tệp văn bản là một chuỗi các chuỗi. Mỗi phần tử là một dòng văn bản.

$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 
Các vấn đề liên quan