source

powershell - powershell(') 새 줄 지정

factcode 2023. 7. 28. 22:57
반응형

powershell - powershell(') 새 줄 지정

Get-Content $user| Foreach-Object{
   $user = $_.Split('=')
   New-Variable -Name $user[0] -Value $user[1]}

스크립트에서 작업하고 텍스트 파일을 배열로 분할하여 각 줄을 기준으로 파일을 분할합니다.

"=" 기호를 무엇으로 변경해야 합니까?

텍스트 파일의 정확한 인코딩에 따라 다르지만,[Environment]::NewLine보통 속임수를 씁니다.

"This is `r`na string.".Split([Environment]::NewLine)

출력:

이것은

그 문제는String.Split메서드는 주어진 문자열의 각 문자에서 분할됩니다.따라서 텍스트 파일에 CRLF 줄 구분 기호가 있으면 빈 요소가 표시됩니다.

연산자를 사용하여 더 나은 해결책을 제시합니다.

"This is `r`na string." -Split "`r`n" #[Environment]::NewLine, if you prefer

사용할 수 있습니다.String.Split분할 방법CRLF또한 분할(String[], StringSplitOptions) 메서드 오버로드를 사용하여 빈 요소로 끝나지 않습니다.

이 방법을 사용할 수 있는 몇 가지 방법이 있습니다.

옵션 1

$input.Split([string[]]"`r`n", [StringSplitOptions]::None)

이는 결합된 데이터에서 분할됩니다.CRLF(캐리지 리턴 및 라인 피드) 문자열은 다음과 같이 표시됩니다.`r`n.그[StringSplitOptions]::None옵션을 사용하면 다음과 같이 허용합니다.Split배열에서 빈 요소를 반환하는 방법이지만 모든 행이 다음으로 끝나는 경우에는 없어야 합니다.CRLF.

옵션 2

$input.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)

이것은 캐리지 리턴 또는 라인 피드에서 분할됩니다.그래서 배열은 빈 요소들이 실제 문자열들과 함께 산재하게 될 것입니다.[StringSplitOptions]::RemoveEmptyEntries옵션은 다음을 지시합니다.Split빈 요소를 포함하지 않는 메서드입니다.

지금까지 제시된 답변은 윈도우즈만 실행 환경으로 간주합니다.스크립트를 다양한 환경(Linux, Mac 및 Windows)에서 실행해야 하는 경우 다음 스니펫을 사용하는 것이 좋습니다.

$lines = $input.Split(
    @("`r`n", "`r", "`n"), 
   [StringSplitOptions]::None)

이것을 하는 간단하고 특이한 방법이 있습니다.

$lines = [string[]]$input

이것은 갈라질 것입니다.$input예:

$input.Split(@("`r`n", "`n"))

이것은 적어도 변환 문서에는 문서화되어 있지 않습니다.
이렇게 하면 빈 항목이 제거되지 않습니다.그리고 그것은 캐리지 리턴에 작동하지 않습니다.\r적어도 Windows에서 끝나는 줄입니다.
Powershell 7.2에서 실험했습니다.

또한 이 문서에서는 캐리지 리턴 및 라인 엔드에서 작동하는 방법에 대해 많이 설명합니다.https://virot.eu/powershell-and-newlines/

추가적인 빈 줄과 관련된 몇 가지 문제가 있고, 저는 문제를 이해하는 해결책을 찾았습니다.virot.eu 에서 발췌:

그래서 새로운 라인을 구성하는 것.여기서 까다로운 부분이 나옵니다, 그것은 상황에 따라 다릅니다.이것을 이해하기 위해서는 캐릭터에게 줄을 서야 합니다.

라인 피드는 ASCII 문자 10입니다.대부분의 프로그래밍 언어에서는 \n을 작성하여 탈출했지만 powershell에서는 'n'입니다.그러나 Windows는 하나의 문자만으로 만족하지 않으며 Windows도 ASCII 문자 13인 캐리지 리턴을 사용합니다.탈출 \r.그렇다면 차이점은 무엇일까요?라인 피드는 포인터를 한 행 아래로 이동시키고 캐리지 리턴은 포인터를 다시 왼쪽으로 반환합니다.Windows에서 기본적으로 파일을 저장하는 경우 줄 바꿈은 먼저 캐리지 리턴으로 저장된 다음 줄 바꿈(\r\n)으로 저장됩니다.split() 명령에 매개 변수를 사용하지 않으면 모든 공백 문자(캐리지 리턴, 라인피드, 탭 등)에서 분할됩니다.이것이 캐리지 리턴과 라인 피드가 모두 있을 때 우리가 5개의 결과를 얻는 이유입니다.

언급URL : https://stackoverflow.com/questions/39252620/powershell-split-specify-a-new-line

반응형