programing

PowerShell로 텍스트 파일의 빈 줄 제거

topblog 2023. 10. 15. 16:57
반응형

PowerShell로 텍스트 파일의 빈 줄 제거

다음을 사용할 수 있다는 것을 알고 있습니다.

gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt

빈 줄을 제거합니다.그러나 '-replace'로 제거하려면 어떻게 해야 합니까?

여기 멋진 라이너를 찾았습니다 >> http://www.pixelchef.net/remove-empty-lines-file-powershell .새로운 선만 포함한 여러 빈 선과 공백만 있는 선, 탭만 있는 선, 조합으로 테스트했습니다.

(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt

코드에 대한 몇 가지 참고 사항은 원본을 참조하십시오.나이스 :)

랜디 스크렛카의 이 코드 조각은 저에게 잘 작동하지만, 문제가 있었습니다. 파일 끝에 새 줄이 여전히 있다는 것입니다.

(gc file.txt) | ? {$_.trim() -ne "" } | set-content file.txt

그래서 마지막으로 이렇게 덧붙였어요.

$content = [System.IO.File]::ReadAllText("file.txt")
$content = $content.Trim()
[System.IO.File]::WriteAllText("file.txt", $content)

공백 문자만 포함된 파일을 제외하려면 -match 대신 -eq를 사용할 수 있습니다.

@(gc c:\FileWithEmptyLines.txt) -match '\S'  | out-file c:\FileWithNoEmptyLines

특별히 사용하지 않음-replace, 하지만 당신은 같은 효과를 얻을 수 있습니다.-notmatch그리고 regex.

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt

RegEx를 사용하여 이 문제를 해결하려면 다중 줄 플래그(?m)를 사용해야 합니다.

((Get-Content file.txt -Raw) -replace "(?m)^\s*`r`n",'').trim() | Set-Content file.txt

교체는 할 수 없고, 어떤 것을 어떤 것으로 교체해야 하며, 둘 다 가지고 있지 않습니다.

이렇게 하면 file.txt에서 후행 공백 및 공백 줄이 제거됩니다.

PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace  "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt;

실제로 파일에서 빈 줄을 필터링하려면 다음을 시도해 볼 수 있습니다.

(gc $source_file).다듬기() | ? {$_.길이 -gt0}

파일

PS/홈/에드워드/데스크탑>Get-Content ./copy.txt

[데스크톱 항목]

이름= calibre Exec= ~/앱스/캘리브/캘리브리브

아이콘=~/앱/캘리브/리소스/content-server/calibre.png

유형=어플리케이션*


먼저 파일에서 내용을 가져온 후 텍스트 문서의 각 줄에 있는 공백을 잘라냅니다.이는 문자열 길이가 0보다 큰 배열의 각 멤버를 보기 위해 where-object로 전달되는 객체가 됩니다.이 개체는 사용자가 시작한 파일의 내용을 바꾸기 위해 전달됩니다.새 파일을 만드는 게 더 나을 겁니다...마지막으로 해야 할 일은 새로 만든 파일의 내용을 다시 읽고 당신의 멋진 모습을 보는 것입니다.

(Get-Content ./copy.txt).Trim() | Where-Object{$_.length -gt 0} | Set-Content ./copy.txt

Get-Content ./copy.txt

빈 줄 또는 공백 문자(탭/공백)만 있는 줄이 제거됩니다.

[IO.File]::ReadAllText("FileWithEmptyLines.txt") -replace '\s+\r\n+', "`r`n" | Out-File "c:\FileWithNoEmptyLines.txt"

Get-Content는 변경할 수 없는 행 배열을 반환합니다.이를 가변 배열로 숨기고 인덱스별로 필요한 행을 삭제할 수 있습니다.매치를 통해 얻을 수 있는 특정 indexex.그런 다음 Set-Content로 결과를 새 파일에 쓸 수 있습니다.이 방법을 사용하면 smthing을 ""로 교체하려고 할 때 tool leaf를 전원 셸로 교체하는 빈 줄을 피할 수 있습니다.제가 완벽한 성능을 보장하는 것은 아닙니다.저는 전문적인 파워셸 개발자가 아닙니다.

$fileLines = Get-Content $filePath
$neccessaryLine = Select-String -Path  $filePath -Pattern 'something'
if (-Not $neccessaryLine) { exit }
$neccessaryLineIndex = $neccessaryLine.LineNumber - 1
$updatedFileContent = [System.Collections.ArrayList]::new($fileLines)
$updatedFileContent.RemoveAt($neccessaryLineIndex)
$updatedHostsFileContent.RemoveAt($domainInfoLineIndex - 1)
$updatedHostsFileContent | Set-Content $hostsFilePath
Set-Content -Path "File.txt" -Value (get-content -Path "File.txt" | Select-String -Pattern '^\s*$' -NotMatch)  

이것은 저에게 적합합니다. 원래 여기서 줄을 얻어서 Joel이 제안한 '^\s*$: PowerShell을 사용하여 문자열이 있는 경우 텍스트 파일에서 줄을 제거합니다.

언급URL : https://stackoverflow.com/questions/9223460/remove-empty-lines-from-text-file-with-powershell

반응형