programing

PowerShell을 사용하여 새 라인을 교체하려면 어떻게 해야 합니까?

lastmoon 2023. 8. 25. 23:54
반응형

PowerShell을 사용하여 새 라인을 교체하려면 어떻게 해야 합니까?

주어진 시험.다음을 포함하는 txt:

test
message

저는 다음과 같이 마무리하고 싶습니다.

testing
a message

다음이 작동해야 한다고 생각하지만 작동하지 않습니다.

Get-Content test.txt |% {$_-replace "t`r`n", "ting`r`na "}

CRLF가 포함된 위치를 찾고 대체하려면 어떻게 해야 합니까?

CRLF는 CR과 LF의 두 문자입니다.하지만,`n둘 다로 구성됩니다.예:

PS C:\> $x = "Hello
>> World"

PS C:\> $x
Hello
World
PS C:\> $x.contains("`n")
True
PS C:\> $x.contains("`r")
False
PS C:\> $x.replace("o`nW","o There`nThe W")
Hello There
The World
PS C:\>

제 생각에 당신은 그 문제에 부딪히고 있는 것 같습니다.`r저는 그것을 제거할 수 있었습니다.`r예제에서 사용만`n,그리고 그것은 성공하였다.물론, 나는 당신이 어떻게 원본 문자열을 생성했는지 정확히 모르기 때문에 그 안에 무엇이 있는지 모릅니다.

가 알기로는 Get-Content는 파이프라인을 통해 텍스트 파일을 롤링할 때 모든 새 줄/캐리지 리턴을 제거합니다.여러 줄의 정규식을 수행하려면 문자열 배열을 하나의 큰 문자열로 다시 결합해야 합니다.저는 다음과 같은 일을 합니다.

$text = [string]::Join("`n", (Get-Content test.txt))
[regex]::Replace($text, "t`n", "ting`na ", "Singleline")

설명: 작은 파일만 있습니다. 여러분!40GB 로그 파일에서 이것을 시도하지 마십시오 :)

와 함께-Raw당신은 당신이 기대하는 것을 얻어야 합니다.

모든 새 줄 문자를 제거하고 일부 문자(예: 쉼표)로 바꾸려면 다음을 사용할 수 있습니다.

(Get-Content test.txt) -join ","

이것은 Get-Content가 줄 배열을 반환하기 때문에 작동합니다.다양한 언어로 토큰화 기능으로 볼 수 있습니다.

사용할 수 있습니다."\\r\\n"의 새로운 라인에 대해서도.powershell나는 이것을 지금 서비스 도구에서 사용했습니다.

내 경우에는"\r\n"일이 안되서 노력했습니다."\\r\\n"~하듯이"\"이 기호는 탈출 문자로 작동합니다.powershell.

이 간단한 Powershell 지침으로 파일이 CRLF인지 탐지할 수 있습니다.

(cat -Raw $args) -match "\r\n$"

\n을 \r\n으로 교체하는 것은 먼저 감지하고 필요한 경우에만 교체를 적용해야 하기 때문에 까다롭습니다. 그렇지 않으면 엉망이 될 것입니다.너무 복잡합니다.

어떤 경우에도 탐지를 잊어버릴 수 있습니다. 파일이 CRLF인지 확인하려면 PowerShell에서 이 작업을 수행할 수 있습니다.

cat $file > $file

언급URL : https://stackoverflow.com/questions/325953/how-can-i-replace-newlines-using-powershell

반응형