2013-03-21 2 views
1

Powershell을 처음 사용합니다. 파일의 텍스트를 여러 번 바꾸려고하지만 중복 된 줄이 생깁니다.Powershell -match - 출력에 중복 행을 생성합니다.

(Get-Content "C:\temp\test.txt") | 
    foreach-object { 

      if ($_ -match "This"){ 
       $_ -replace "This" , "That" 
      } 

      if ($_ -match "test"){ 
       $_ -replace "test" , "toast" 
      } 

    } | Set-Content "C:\temp\test.txt" 

내 출력해야한다 :

This is a test. 
There is a test. 
나는 다음과 같은 스크립트를 실행

:

That is a toast. 
There is a toast. 

를하지만의 교체에 대해 별도의 라인을 출력하고 내 테스트 파일은 다음과 선이 입력의 첫 번째 줄 :

That is a test. 
This is a toast. 
There is a toast. 

두 줄 사이에있는 두 번째 줄은 "일치"기준 중 하나를 충족하며 올바르게 대체되었습니다. 그러나 첫 번째 줄은 두 번 출력됩니다. 한 줄은 각 줄에 대입됩니다. 라인이 두 조건에 모두 일치하면 스크립트를 한 번만 출력하면됩니다.

(Get-Content "C:\temp\test.txt") -replace 'This','That' -replace 'test','toast' | Set-Content "C:\temp\test.txt" 

답변

2

쉽게 출력의 3 선을 얻고있는 이유 :

+0

@mjolinor가 나의 예제 질문을 해결하기위한 답을 제공하지만, 이것은 나의 근본적인 문제와 $ _의 사용에 대한 나의 오해를 해결한다. – Jason

1

나는 이런 식으로 할 것. 첫 번째 개체는 'This is a test'이고 첫 번째 개체는 if과 일치하므로 'This''That'으로 대체하고 That is a test을 출력합니다. 그런 다음 첫 번째 개체는 'test'이 있으므로 두 번째 if과 일치하므로 'This is a toast'도 출력됩니다. 마지막으로 두 번째 객체는 두 번째 객체 인 if과 일치하므로 'There is a toast'을 출력합니다. 따라서 출력 3 라인.

$_ -replace 'x','y'을 입력하면 다른 개체가 반환되고 $ _은 변경되지 않습니다. 스크립트를 작성하는 경우 여러 줄에 입력하고 원하는대로 처리하십시오.

$file = Get-Content $path 
foreach($line in $file){ 
    if($line -match 'This'){ 
     $line = $line -replace 'This','That' 
    } 
    if($line -match 'test'){ 
     $line = $line -replace 'test','toast' 
    } 
    $line 
} 
+0

일치 조건이 충족 될 때만 교체해야합니다. 때때로 한 줄은 두 가지 조건을 모두 충족시키고 두 줄을 출력합니다. 두 줄을 모두 교체해야 할 때입니다. 좀 더 구체적으로 내 질문을 업데이트하겠습니다. – Jason

+0

입력 줄이 'This'와 'test'와 일치하는 경우에만 바꾸기를 원한다는 말입니까? – mjolinor

+0

이 문제를 해결하기 위해 다시 내 질문을 업데이트했습니다. 한 라인이 두 조건을 만족한다면 두 개의 별도 라인을 출력하는 대신 한 라인을 출력하기 위해 두 라인을 모두 교체해야합니다. – Jason

관련 문제