2016-08-23 3 views
1

매주 여러 파일에서 특정 문자열을 대체해야합니다.주간 복수 파일의 문자열 바꾸기

extract_mdp_staging_error(149); 

다른 파일이 동일하게 보이지만 문자열은 전 다릅니다 : 나는 다음입니다 PowerShell을 교체하는 선을 사용하여 해당 프로세스를 단순화하기 위해 노력했다.

extract_kdp_staging(149); 
extract_zub_staging_error(149); 
... 

내 스크립트에서 텍스트 부분을 검색하여 사용자 입력으로 바꾸는 방법이 있습니까? 다음주부터 하드 코딩 된 검색을 사용할 수 없기 때문에 149는 아니지만 150 등이 있습니다.

편집 나는 다른 응용 프로그램에 대한 PowerShell을 사용하여 파일의 전체 라인을 대체하는 스크립트를 사용하고있다,하지만 난 그것을 코딩하는 방법을 알아낼 수 없었다, 그래서 그것은 단지 괄호 부분을 대체합니다. PowerShell을 스크립트 :

begin 
extract_zdlb_staging(149); 
commit; 
end; 
/
quit; 
+0

이 정규식을 사용하여 행할 수 있어야한다. 예제가 있습니까? – Jakodns

+0

죄송합니다. 저는 정규식으로 일한 적이 없습니다. 하지만 필자는 과거 Powershell 스크립트와 예제 파일을 게시하여이를 대체해야합니다. 바라기를 이것은 당신이 의미 한 것입니다. –

답변

2

내가 긍정적으로 regex을 사용합니다 : 여기

Get-ChildItem C:\Users\mosermich\Desktop\Extractor\Ressources -Filter '*.sql' -ErrorAction Stop | ForEach-Object { 
     $content = Get-Content $_.Fullname 
     $content[7] = ' rel.nr sqlldr {0}' -f $releasenr 
     $content | Set-Content -Path $_.FullName 
     } 

그리고는 내가 선 두에()의 숫자를 교체해야 할 파일 중 하나입니다 내다 및 lookbehind :

$userInput = 250 
$filePath = 'yourFilePath' 

$content = Get-Content $filePath 
$content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $filePath 

정규식 :

(?<=\()(\d+)(?=\)) 


편집 : 여기 귀하의 예제에 채택 된 스크립트를

$userInput = 250 # The number you want to put in the parentheses 
Get-ChildItem C:\Users\mosermich\Desktop\Extractor\Ressources -Filter '*.sql' -ErrorAction Stop | 
    ForEach-Object { 
     $content = Get-Content $_.Fullname 
     $content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $_.Fullname 
    } 
+0

빠른 답변과 설명에 감사드립니다! (PowerShell 문제로 지난 며칠 동안 제게 많은 도움을 주셨습니다.) Regex를 사용하면 실제로는()의 숫자에만 영향을 미치지 만 새 숫자는 안에 삽입하지 않습니다. 내가 뭐 잘못하고 있니? –

+0

당신은 환영합니다 :-). 첫 번째 스크립트를 실행하면 250을 괄호 안에 넣지 않습니까? –

+0

나는 완전히 새로운 파일에서 그것을 시도하고 그것을 관리자로 돌렸다. 괄호 안의 이전 숫자를 삭제하지만 새로운 숫자로 채우지 않습니다. –