2014-09-22 5 views
1

두 개의 텍스트 파일이 있습니다. "===="Powershell을 사용하여 파일 섹션을 대체하려면 어떻게해야합니까?

qwer 
asdf 
---- 
1234 
5678 
==== 
zxcv 

을 그리고

uiop 
hjkl 

가 어떻게 "----"사이 부분을 대체 할 PowerShell을 사용할 수있는 것처럼 두 번째는 외모 : 첫 번째는 다음과 같습니다 두 번째 파일의 내용으로 첫 번째 파일에? 원하는 결과는 다음과 같습니다.

qwer 
asdf 
---- 
uiop 
hjkl 
==== 
zxcv 

답변

3

Regex가 수행합니다.

$File1 = Get-Content C:\Path\To\FileToChange.txt -Raw 
$File2 = Get-Content C:\Path\To\NewContent.txt -Raw 
$file1 -replace "(?s)(?<=----).*(?=====)","`n$file2`n"|Out-File C:\Path\To\NewFile.txt 

완료. 이는 두 파일을 여러 줄로 읽은 다음 '----'다음에 '===='앞에 오는 텍스트를 찾아서 두 번째 파일의 텍스트로 바꿉니다. 그것은 텍스트 앞에 새로운 줄을 추가하고 추가하므로 모든 것이 올바르게 보이고 줄로 ---- uiop 또는 줄로 hjkl ====으로 끝나지 않습니다.

편집 : -Raw가 PowerShell 버전에서 지원되지 않으면 -ReadCount 0을 대신 사용해야합니다. 그것이 당신을 실패하는 경우 또는이 시도 :

(Get-Content <path>) -join "`n" 
+0

. -Raw는 여기서 무엇을해야하나요? – hugomg

+0

흠, 이전 버전의 powershell을 사용해야합니다. -Raw는 전체 파일을 문자열의 배열로 읽는 대신 단일 여러 줄 문자열로 읽습니다. PowerShell의 어떤 버전을 사용하고 있습니까? – TheMadTechnician

+0

$ PSVersionTable을 출력하면 PSVersion이 2.0이고 CLRVersion이 2.0.50727.5456이고 BuildVersion이 06.1.7601.17514라고합니다. – hugomg

0

당신은이를 사용할 수 있습니다 : 나는 익지 않는 매개 변수를 인식하지 않다는 오류 메시지를 받고 있어요

$file1 -replace '----[\s\S]*?====', "$('----' + $(gc $file2) + '====')" 
관련 문제