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
'programing' 카테고리의 다른 글
Java에서 여러 SQL 문 실행 (0) | 2023.08.21 |
---|---|
조인을 사용하여 한 테이블에서 삭제 (0) | 2023.08.16 |
문자열 및 대/소문자 구분 선택 (0) | 2023.08.16 |
Android TextView에서 줄 바꿈을 추가하는 방법은 무엇입니까? (0) | 2023.08.16 |
런타임 중에 asp.net 웹 응용 프로그램이 디버그 모드에 있는지 확인하는 선호하는 방법은 무엇입니까? (0) | 2023.08.16 |