2017-03-23 10 views
-2

누구든지 텍스트 파일에서 문자열을 찾고 powershell을 사용하여 일치하는 텍스트 위의 10 줄을 삭제하는 간단한 방법을 찾는 데 도움이 될 수 있습니까?Powershell이 ​​일치하는 텍스트 위의 줄을 삭제합니다.

는 예를 들어, 나는 (I 찾으려 유사한 텍스트의 여러 인스턴스와 함께)이 라인을 따라 텍스트 파일이이 예에 따라서

=============start============ 
random text 
random text 
random text 
random text 
random text 
string I want to find 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 

, 나는 문자열 "의 모든 인스턴스를 검색 할 나는 찾고 싶다 "라고 말하면 일치하는 텍스트 위에 X 줄을 지우고 나머지를 다른 .txt 파일로 출력합니다. 위의 줄 수는 항상 같습니다.

(Get-Content -LiteralPath $Path\processing\data.txt) -replace  '$matchstart*$matchend','' |out-file $Path\processing\test.txt 

그러나, 이것은 나에게 내가 (아무것도 제거하지 않습니다) 기대했다 출력을 제공하지 않는 것 다음과 같이

나는 두 문자열 사이의 텍스트와 일치하는 것을 시도했다.

이렇게해도 작동하지만 잠재적으로 문제가됩니다. 왜냐하면 시작 문자열이 여러 번 나타나고 내가 원하는 것 이상을 삭제할 수 있기 때문입니다.

$str = Get-Content $Path\processing\pfxdetailpre.txt | out-string 
$start = $str.indexOf($nokeystart) + 1 
$end = $str.indexOf($nokeyend, $start) 
$length = $end - $start 
$result = $str.substring($start, $length) 

다음은 내 문자열과 줄을 삭제하는 것이 좋습니다. 위의 X 줄을 더 삭제하려면 편집 방법을 알아낼 수 없습니다.

gc $file | %{ 
$a=$b=$null 
}{ 
if($a){$a} 
$a=$b 
$b=$_ 
if($b -match $key){$a=$b=$null} 
}{ 
if($b -notmatch $key){ 
if($a){if($b){"$a`n$b"}else{$a}}elseif($b){$b} 
} 
} | out-file $newfile 
+0

이미 시도한 질문으로 질문을 업데이트 할 수 있습니까? – arco444

+0

스택 오버플로는 코드 작성 서비스가 아니므로 직접 코드를 작성해야합니다. 문제에 대한 조사를 해보고 (아마도 페이지 상단의 검색 창을 시도해보십시오) 직접 코드를 작성해보십시오./코드에 문제가있는 경우 다시 질문하고 시도한 내용과 이유가 무엇인지 설명하십시오. 훌륭한 질문에 대한 도움을 받으려면 [질문하는 방법] (http://stackoverflow.com/questions/how-to-ask)을 참조하십시오. –

+0

내가 지금 가지고있는 코드는 다음과 같이 텍스트 주위의 시작 문자열과 끝 문자열을 일치 시키려고했습니다. (Get-Content -LiteralPath $ Path \ processing \ data.txt) -replace '$ matchstart * $ matchend' ''| out-file $ Path \ processing \ test.txt 명령은 실행되지만 텍스트가 모두 제거되지 않으므로 예상 한대로 일치하지 않습니다. –

답변

0

좋아, 그럼 LotPings 제안을 사용하면 다음과 같은 코드가 있습니다. $ matchstart. * $ matchend로 작업 할 수 없기 때문에 어쨌든 변경되지 않은 원시 값을 사용했습니다.

그래서 내 파일은 다음과 같이 보입니다. 내가 시작/끝이 어떻게 생겼는지,하지만 난 단지 그것을 특정 문자열이 포함 된 경우이를 삭제할 :

=============start============ 
random text 
random text 
random text 
string I want to find 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 
=============start============ 
random text 
random text 
random text 
=============end============ 

나는 다음과 같은 코드가 잘 작동 발견을!

$file = Get-Content C:\test1.txt -Raw 
$result = $file | Select-String -Pattern '(?smi)(=============start============\s+string I want to find.*?=============end============)' 
$result.Matches.Value | Out-File -FilePath C:\processing.txt 
$file -replace '(?smi)(=============start============\s+string I want to find.*?=============end============)' | Out-File -FilePath C:\configfinal.txt 

나는 다른 사람들이 이것에 접근하는 방법을 듣고 싶다. PowerShell을 처음 접했을 때 저는 2 주 동안 만 배우기 시작했습니다. 이것은 나 자신이 쉽게 이해할 수없는 첫 번째 과제입니다.