programing

PowerShell에서 구분 기호 뒤/앞 문자열의 텍스트를 잘라내는 방법

padding 2023. 8. 16. 22:03
반응형

PowerShell에서 구분 기호 뒤/앞 문자열의 텍스트를 잘라내는 방법

음악 라이브러리의 각 파일을 가져온 다음 해시 합계를 수행하여 다음과 같은 파일에 쓰는 PowerShell 스크립트를 만들고 싶습니다.

test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198

스크립트를 시작할 때 먼저 음악 라이브러리를 기존 값과 비교해야 하지만, 이를 위해서는 스크립트 이후의 모든 것을 차단하고 싶습니다.;파일 이름과 파일 이름(또는 파일 경로)을 비교할 수 있도록...하지만 어떻게 해야 할지 모르겠어요

저는 다음을 통해 값을 바꾸려고 했습니다.$name = $name -replace ";*",""하지만 그것은 효과가 없었습니다.필터도 해봤는데요...하지만 나는 방법은 잘 모르겠습니다.

$pos = $name.IndexOf(";")
$leftPart = $name.Substring(0, $pos)
$rightPart = $name.Substring($pos+1)

PowerShell은 내부적으로 String 클래스를 사용합니다.

$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"

$text.split(';')[1].split(' ')

다음을 사용할 수 있습니다.

$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"
$separator = ";" # you can put many separator like this "; : ,"

$parts = $text.split($separator)

echo $parts[0] # return test.txt
echo $parts[1] # return the part after the separator

$name -replace ";*",""

가까웠지만 정규식이 아닌 와일드카드식 구문을 사용했습니다. 이것이 오퍼레이터가 예상하는 바입니다.

따라서(해시 시퀀스 단축):

PS> 'test.txt ; 131 136 80 89 119 17 60 123 210 121 188' -replace '\s*;.*'
test.txt

참고:

  • 대체 텍스트 피연산자(두 번째 RHS 피연산자)를 생략하면 다음과 같이 암시적으로 사용됩니다.""(빈 문자열). 즉, 정규식과 일치하는 항목을 효과적으로 제거합니다.

  • .*잠재적으로 빈 실행을 나타내는 것입니다(*문자의 ( ).정규식에서 - 정규식과 동등한 정규식입니다.* 와일드카드 식으로 자동으로 실행됩니다.

  • 추가 중\s*이전에;정규식에서는 후행 공백도 제거합니다(\s파일 이름 뒤에 있습니다.

  • 사용한 적이 있습니다.'...'보다는"..."PowerShell이 앞으로 확장하는 항목과 확장 가능한 문자열 간의 혼동을 방지하기 위해 정규식을 포함합니다(PowerShell 및 의 항목 참조).NET 정규식 엔진이 보입니다.

이것은 구분 기호 사이의 특정 문자 양에 대한 특정 구분 기호에 대해 작동합니다.위치가 바뀌었지만 구분 기호가 동일한 루프마다 이를 사용하려고 시도하는 데 많은 문제가 있었습니다.예를 들어, 나는 백슬래시를 구분 기호로 사용하고 있었고 백슬래시의 오른쪽에 있는 모든 것만 사용하기를 원했습니다.문제는 일단 위치가 정의되면(처음부터 71자) 스크립트에서 구분 기호가 실제로 어디에 있는지에 관계없이 매번 $pos를 71로 사용한다는 것이었습니다.나는 구분 기호와 .split을 사용하여 사물을 구분하는 다른 방법을 찾은 다음 분할 변수를 사용하여 섹션을 호출했습니다. 예를 들어 첫 번째 섹션은 $variable[0]이고 두 번째 섹션은 $variable[1]입니다.

저는 인보이스 no-product no.pdf라는 이름의 파일을 포함한 파일로 가득 차 있었고 제품 no.pdf로 정렬하려고 했습니다. 그래서...

get-childitem *.pdf | sort-object -property @{expression={$\_.name.substring($\_.name.indexof("-")+1)}}

로 고로가 때는 가없경이 됩니다.-에 의한 이 .$_.name

정규식을 사용할 경우 결과는 $matches[1]입니다.

$str = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"
$str -match "^(.*?)\s\;"
$matches[1]
test.txt

언급URL : https://stackoverflow.com/questions/5203730/how-to-truncate-text-in-string-after-before-separator-in-powershell

반응형