2016-06-03 3 views
2

나는 powershell 스크립트를 작성하여 HTM 파일을 구문 분석합니다. 파일의 모든 링크 파일을 찾은 다음 파일 경로, 파일 이름 및 확장자를 대문자로 사용해야합니다. (모든 파일에서 30 또는 40 개의 링크가 가능함). 문제가있는 부분은 아래의 두 번째 부분 인 'XXXX'부분입니다. 정규 표현식은 내가 찾고있는 문자열을 찾을 수 있지만 대문자 버전으로 문자열을 '바꾸는'방법을 알아낼 수 없다. 그런 다음 기존 파일을 새 링크로 업데이트한다.Powershell - Regex에서 찾은 문자열을 어떻게 대문자로 표시합니까?

나는 이것을 올바르게 설명하기를 바랍니다. 누구나 제공 할 수있는 도움을 이해하십시오.

이것은 내가 지금까지 가지고있는 코드입니다 ...

$FilePath = 'C:\WebDev' 
$FileName = 'Class.htm' 
[regex]$regex='(href="[^.]+\.htm")' 
#Will Match the string href="filepath/file.htm" 

( Get-Content "$FilePath\$FileName") -replace $regex , 'XXXX' | Set-Content "$FilePath\$FileName"; 
기존 파일에 업데이트되는

최종 문자열이 HREF = "FILEPATH/file.htm은"

+1

http://stackoverflow.com/a/10996050/4424236 – beatcracker

답변

1

두 beatcracker과 같아야합니다 briantist는 올바른 접근법을 보여주는 this answer을 참조하십시오. 정규식은 대문자로 변환 할 수 없으므로 .NET String.ToUpper() 함수에 연결해야합니다.

-replace을 사용하는 대신 $regex 개체에서 .Replace() 메서드를 사용하십시오 (다른 답변에서 설명한대로). 파이프 라인의 각 문자열에 대해 호출되도록 ForEach-Object 구조가 필요합니다. 난 가독성을 위해 마지막 줄을 나눴지만 꼭해야한다면 한 줄에 그 줄을 유지할 수있다.

$FilePath = 'C:\WebDev' 
$FileName = 'Class.htm' 
[regex]$regex='(href="[^.]+\.htm")' 

(Get-Content "$FilePath\$FileName") | 
    ForEach-Object { $regex.Replace($_, {$args[0].Value.ToUpper()}) } | 
    Set-Content "$FilePath\$FileName" 
+0

안녕 JamesQMurphy,이 좋은 답변이지만, [당신이 중복 있다고 동의하는 경우, 당신이 대답을 게시해서는 안 (HTTP ://meta.stackexchange.com/q/10841/268785). 내가 가까운 투표를했기 때문에 내 의견이 자동으로 추가되었습니다. 당신은 아마 가까운 득표를 보지 못했을 것입니다. 그래서 당신은 모를 것입니다. 근본적으로 4 명 이상이 같은 (또는 어떤 금표 배지 소지자에게) 투표한다면 그것은 닫히고 모든 사람들에게 중복이 링크 될 것입니다. 그래서 나는 대답을 삭제하는 것이 좋습니다. (다시 한번 말하지만, 그것은 좋은 것입니다. 나는 당신의 노력에서 벗어나려는 것이 아닙니다.) – briantist

+0

@briantist 나는이 질문이 그 질문과 중복되는 것에 동의하지 않습니다. 다른 질문은 PowerShell에서 람다 식을 사용하는 방법에 대해 묻습니다. 사실, 다른 질문은 저자가 "이 정규 표현식 문제를 푸는 것이 아닙니다"라고 말합니다. 이 질문은 정규 표현식으로 대문자로 변환하는 방법에 대해 묻습니다. 람다 식은 해답의 일부입니다. ForEach-Object 부분은 다른 부분입니다. – JamesQMurphy

+0

아, 알아. 그러나 링크 된 메타 포스트에서 말했듯이 : '질문은 똑같은 (잠재적 인) 답변이 있다면 중복 될 수 있습니다.'라는 말은 반드시 같은 질문이 될 것이라는 의미는 아니지만 그 대답은 거기에서 찾을 수 있습니다. 또한, 그 "정규식 문제"는 그 구도자에 의해 참조 된 정규식 자체를 쓰는 언급했다; 그 질문은 주로 같은 것이었다. 그러나 당신은 그것의 반복 측면에 대한 요점을 가지고, 그래서 나는 가까운 투표를 철회했습니다. – briantist

관련 문제