programing

문자열에서 텍스트를 제거하는 PowerShell

codeshow 2023. 8. 26. 00:06
반응형

문자열에서 텍스트를 제거하는 PowerShell

특정 문자 뒤에 있는 문자열의 모든 텍스트를 제거하는 가장 좋은 방법은 무엇입니까?내 경우 "=" 그리고 내 경우 다른 캐릭터 뒤에 a.,하지만 그 텍스트를 사이에 두고 있나요?

샘플입력

= 이걸 간직하고,

이를 수행하는 또 다른 방법은 연산자 교체입니다.

$TestString = "test=keep this, but not this."

$NewString = $TestString -replace ".*=" -replace ",.*"

.*=등호를 포함한 최대 문자 수를 의미합니다.

,.*쉼표 뒤에 임의의 수의 문자가 오는 것을 의미합니다.

기본적으로 문자열의 두 부분을 삭제하기 때문에 해당 부분을 대체할 빈 문자열을 지정할 필요가 없습니다.여러 개의 대체를 사용할 수 있지만 순서는 왼쪽에서 오른쪽으로 정렬됩니다.

$a="some text =keep this,but not this"
$a.split('=')[1].split(',')[0]

돌아온다

keep this

이렇게 하면 원하는 작업을 수행할 수 있습니다.

C:\PS> if ('=keep this,' -match '=([^,]*)') { $matches[1] }
keep this

이것은 정말 오래된 것이지만, 저는 이것을 우연히 발견할 수 있는 다른 사람들을 위해 저의 약간의 변형을 추가하고 싶었습니다.정규 표현은 강력한 것입니다.

등호와 쉼표 사이에 있는 텍스트를 유지하려면:

-replace "^.*?=(.*?),.*?$",'$1'

이 정규식은 줄의 시작 부분에서 시작하여 첫 번째 등호까지 모든 문자를 지우고 다음 쉼표까지 모든 문자를 캡처한 다음 줄의 끝 부분까지 모든 문자를 지웁니다.그런 다음 전체 줄을 캡처 그룹(괄호 안에 있는 모든 항목)으로 바꿉니다.하나 이상의 등호와 하나 이상의 쉼표를 포함하는 모든 행과 일치합니다.이것은 Trix의 제안과 유사하지만, 그 제안과 달리 동일한 기호나 쉼표만 포함하는 선과 일치하지 않습니다. 두 가지를 순서대로 모두 포함해야 합니다.

나는 출력을 분석하기 위해 위의 @benjamin-hubbard의 답변을 참조했습니다.dnscmdIP와 호스트 이름의 PHP "사전"/키-값 쌍을 생성합니다.여러 개를 묶었습니다.-replace텍스트를 아무것도 없는 상태로 대체하거나 PHP 파일의 데이터를 포맷하기 위해 함께 인수를 지정합니다.

$DnsDataClean = $DnsData `
    -match "^[a-zA-Z0-9].+\sA\s.+" `
    -replace "172\.30\.","`$P." `
    -replace "\[.*\] " `
    -replace "\s[0-9]+\sA\s","`t"

$DnsDataTable = ( $DnsDataClean | `
    ForEach-Object { 
        $HostName = ($_ -split "\t")[0] ; 
        $IpAddress = ($_ -split "\t")[1] ; 
        "`t`"$IpAddress`"`t=>`t'$HostName', `n" ;
    } | sort ) + "`t`"`$P.255.255`"`t=>`t'None'"

"<?php
`$P = '10.213';
`$IpHostArr = [`n`n$DnsDataTable`n];

?>" | Out-File -Encoding ASCII -FilePath IpHostLookups.php

Get-Content IpHostLookups.php

언급URL : https://stackoverflow.com/questions/19168475/powershell-to-remove-text-from-a-string

반응형