2015-01-16 4 views
0

이 스크립트에 도움이 필요합니다. 나는 천천히 이걸 얻었지만이 시점에서 도움이 필요하다.Powershell : 다중 대체 및 삭제

텍스트가 섹션의 끝에서 파일의 특정 지점으로 이동 한 다음 이동 된 텍스트를 삭제하는 스크립트가 필요합니다. 이동 될 텍스트에는 마커가 있고 위치도 표시됩니다. 나는 이동 후 텍스트를 삭제할 수 있어야합니다. 또한 동일한 디렉토리에있는 여러 개의 txt 파일에 대해 수행해야합니다. 예를 들어

:

Sample Input .txt 

A;1;1;####; (#### is the location (1) marker) 
B 
B 
B 
====-1234 (==== is the find (1) marker) 
A;1;1;####; (#### is the location (2) marker) 
B 
B 
B 
====-5678 (==== is the find (2) marker) 

After processing 

A;1;1;1234; 
B 
B 
B 
A;1;1;5678; 
B 
B 
B 

텍스트 파일은 다음과 같은 여러 그룹을 가질 수 있습니다. 각 그룹에 대해 위에서 아래로이 작업을 수행해야합니다. 여기까지 내가 지금까지 가지고있는 것입니다, 그냥 텍스트를 이동하고 삭제하지 않습니다.

$file = "C:\Users\NX07934\Documents\Projects\23045\Docs\SampleData\*.txt" 
$old = "\####" 

$find = Get-ChildItem $file -recurse| Select-String -pattern "====-*" 

$split = $find.ToString().Split("-") 
$new = $split[1] 


get-childitem "C:\Dir" -recurse -include *.txt | 
select -expand fullname | 
    foreach 
    { 
     (Get-Content $_) -replace $old,$new | 
     Set-Content $_    
    } 

감사합니다.

답변

1

도움이 필요하십니까?

$text = 
@' 
A;1;1;####; 
B 
B 
B 
====-1234 
A;1;1;####; 
B 
B 
B 
====-5678 
'@ 

$regex = 
@' 
(?ms)(.+?####; 
.+?) 
====-(\d+) 
'@ 

([regex]::matches($text,$regex) | 
foreach { 
$_.groups[1].value -replace '####',($_.groups[2].value) 
}) -join '' 

A;1;1;1234; 
B 
B 
B 
A;1;1;5678; 
B 
B 
B 

편집 : -이 파일의 모음에 적용합니다 : 해당 인스턴스에 근무하지만, 내가 그것을 그 여러 파일에 할 필요가

$regex = 
@' 
(?ms)(.+?####; 
.+?) 
====-(\d+) 
'@ 

Get-Childitem -Path C:\somedir -Filter *.txt | 
foreach { 

    $Text = Get-Content $_ -Raw 

    ([regex]::matches($text,$regex) | 
    foreach { 
    $_.groups[1].value -replace '####',($_.groups[2].value) 
    }) -join '' | 
    Set-Content $_.FullName 
} 
+0

. ==== - 1234에 대한 .txt 검색을 열고 ####을 숫자로 바꿉니다. 하나의 파일에는 여러 개의 그룹이 있고 디렉토리에는 여러 개의 파일이있을 수 있습니다. –

+0

왼쪽 예. 파일 당 여러 인스턴스를 처리합니다. 파일 수집을위한 루프를 설정하기 만하면됩니다. – mjolinor

+0

나는 스 니펫을 시도했는데 -Raw 줄에서 오류가 발생했습니다 : 'Get-Content : 매개 변수 이름 'raw'와 일치하는 매개 변수를 찾을 수 없습니다. C : \ Users \ NX07934 \ Documents \ Projects \ 23045 \ Docs \ SampleData \ PowerShellTest_Regex.ps1 : 11 char : 32 + $ text = Get-Content $ _ -raw <<<< + CategoryInfo : InvalidArgument : :) [Get-Content], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound, Microsoft.PowerShell.Commands.GetContentCommand' –