대소문자를 구분하지 않는 PowerShell 교체
다음과 같은 PowerShell 스크립트가 있습니다.
$RegExplorer = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
$NullSessionPipes = "$($RegExplorer.NullSessionPipes)"
$NullSessionPipes
$NullSessionPipes = $NullSessionPipes.replace("browser", "")
$NullSessionPipes
이 스크립트는 검사하는 레지스트리 키가 내가 지정한 경우인 "브라우저"와 정확히 일치하는 한 잘 작동합니다.
그러나 레지스트리 키에서 "BROWER" 또는 "Browser"라고 하는 경우가 다르다면 교체하지 않습니다.
문자열을 만들 방법을 찾고 있습니다. 케이스를 둔감하게 교체할 수 있는 방법을 찾고 있습니다.비교를 쉽게 하기 위해 먼저 .lower 또는 .topup을 사용하여 문자열을 변환할 수 있다는 것을 알고 있지만, 이 특정 레지스트리 키 또는 이에 액세스하는 응용 프로그램이 대소문자를 구분하는지는 알 수 없으므로 기존 키의 경우를 변경하고 싶지 않습니다.
이것을 쉽게 할 수 있는 방법이 있습니까?
저를 현학자라고 부르지만, 여기서 아무도 완전히 틀린 사람은 없었지만, 최종 해결책에 대한 정확한 코드를 제공한 사람도 없었습니다.
다음 줄을 변경해야 합니다.
$NullSessionPipes = $NullSessionPipes.replace("browser", "")
다음 항목에 대해:
$NullSessionPipes = $NullSessionPipes -ireplace [regex]::Escape("browser"), ""
문자열에 정규 표현식 문자(예: *+[](), 등)가 없는 이상한 [regex] 텍스트는 엄격하게 필요하지 않습니다.그래도 당신이 더 안전해요이 구문은 변수에도 적용됩니다.
$NullSessionPipes = $NullSessionPipes -ireplace [regex]::Escape($stringToReplace), $stringToReplaceItWith
NullSessionPipes는 다중 문자열 값이며 둘 이상의 문자열이 있을 경우 바꾸기 방법(대소문자 구분)이 실패할 수 있습니다.-replace 연산자를 사용할 수 있습니다.기본적으로 모든 비교 연산자는 대소문자를 구분하지 않습니다.대소문자 구분 연산자는 -creplace, -ceq 등과 같이 'c'로 시작합니다.
i로 시작하는 연산자는 -replace, -ieq와 같이 대소문자를 구분하지 않으며 -replace, -ieq와 동일합니다.
자세한 내용은 about_Comparison_Operators를 참조하십시오.
대신 정규 표현식 대체를 사용합니다.
$RegExplorer = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
$NullSessionPipes = "$($RegExplorer.NullSessionPipes)"
$NullSessionPipes
$NullSessionPipes = $NullSessionPipes -replace "browser", ""
$NullSessionPipes
그.Replace
메서드에는 대소문자를 구분하지 않는 옵션이 없습니다.
String.교체 방법
...이 메서드는 일반(대소문자 구분 및 문화 구분 없음) 검색을 수행합니다...
https://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx
이 질문에 대한 다른 대답은 다음을 사용할 것을 제안합니다.-replace
아니면-ireplace
, 만약 당신이 regex 교체를 사용하고 싶다면 그것은 괜찮습니다.그러나 @Bob이 그의 (그녀?) 코멘트에서 언급했듯이 이것이 항상 적절하지는 않습니다.대체 텍스트에 $_와 같은 리터럴 문자열을 포함하려는 경우를 예로 들 수 있습니다.
다른 대소문자 구분 장소에서 차용한 한 가지 방법은 "입력" 문자열과 "검색" 문자열을 소문자로 변환하는 것입니다.
[PS]> "TeXT".ToLower().Replace("text","NewString")
NewString
하지만..이로 인해 검색 문자열과 일치하지 않는 모든 것에 대해 출력이 소문자로 표시되며, 이는 허용되지 않을 수도 있습니다.
[PS]> "DON'T CHANGE MY TeXT".ToLower().Replace("text","NewString")
don't change my NewString
더 스트링.교체 방법에는 대소문자를 구분하지 않는 교체를 허용하는 두 가지 다른 오버로드가 있습니다.
바꾸기(String, String, String 비교)
바꾸기(String, String, Boolean, CultureInfo)
첫 번째 경우에는 Ordinal IgnoreCase와 같이 대소문자를 무시하는 StringComparison을 선택해야 합니다.두 번째는 대소문자 구분을 제어하는 부울입니다. CultureInfo의 null은 현재 문화를 사용합니다.
PowerShell 7에서 이를 사용하면 다음과 같습니다.
$s = 'All the HIP cats'
$s.Replace('hip','cool') # doesn't work: All the HIP cats
$s.Replace('hip','cool','OrdinalIgnoreCase') # works : All the cool cats
$s.Replace('hip','cool',$true,$null) # works : All the cool cats
언급URL : https://stackoverflow.com/questions/9117623/case-insensitive-powershell-replacement
'IT' 카테고리의 다른 글
Spring Boot + Springbox swagger error (0) | 2023.10.10 |
---|---|
null >= 0 & & null <= 0>인데 null == 0이 아닌 이유는 무엇입니까? (0) | 2023.10.10 |
MySQL에서 LIMIT 1 사용 (0) | 2023.10.10 |
__ne__을 __eq__의 부정으로 구현해야 합니까? (0) | 2023.10.10 |
c++ 주 기능에서 다른 기능으로 변경하려면 어떻게 해야 합니까? (0) | 2023.10.10 |