2012-02-10 29 views
16

tôi biết rằng tôi có thể sử dụng:loại bỏ dòng trống từ tập tin văn bản với PowerShell

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

để loại bỏ dòng trống. Nhưng làm thế nào tôi có thể loại bỏ chúng với '-replace'?

+3

Tại sao bạn muốn thay thế? Và làm việc trên tốc độ chấp nhận của bạn – manojlds

+0

Câu trả lời của tôi xóa các dòng trống với '-replace' [toán tử so sánh] (http://technet.microsoft.com/en-us/library/dd315321.aspx). 'Get-Content' không có tham số thay thế, vì vậy tôi giả sử bạn đang tìm cách thực hiện nó với toán tử. –

Trả lời

1

Bạn không thể thay thế, bạn phải thay thế SOMETHING bằng SOMETHING và bạn không có cả hai.

+0

là hỗ trợ Poowershell -remove "" để xóa các đường đẳng cấp? – Suliman

+0

Không có vẻ như nó không hỗ trợ "-remove". – Suliman

+1

Bạn đang nói táo và cam. Tháo và thay thế rõ ràng là khác nhau. Những gì bạn có về cơ bản sẽ làm việc, nhưng có lẽ bạn đang cố gắng để xây dựng lại các tập tin hiện có nhưng không có khoảng trống. PS C: \> $ text = get-content a.txt PS C: \> $ text | nơi {$ _} | out-file a.txt –

0

Điều này sẽ xóa các dòng hoặc dòng trống chỉ với các ký tự khoảng trắng (tab/dấu cách).

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

Bạn có thể sử dụng thay vì -Kết hợp -eq nếu bạn cũng muốn loại bỏ các file mà chỉ chứa các ký tự khoảng trắng:

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

Tôi tìm thấy một đẹp lót đây >>http://www.pixelchef.net/remove-empty-lines-file-powershell. Chỉ cần thử nghiệm nó với một số dòng trống bao gồm cả dòng mới cũng như các dòng chỉ với dấu cách, chỉ các tab và kết hợp.

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

Xem tài liệu gốc cho một số lưu ý về mã. Nice :)

+1

Tôi nghĩ về số dư tôi thích '(gc file.txt) | ? {-not $ _. IsNullOrWhiteSpace()} | set-content file.txt' vì nó thể hiện ý định rõ ràng hơn, nhưng nó cũng tương tự như vậy. –

+0

Trong nháy mắt, tôi dường như không có phương pháp "IsNullOrWhiteSpace()" trên chuỗi của tôi ... và ... làm thế nào một phương pháp thể hiện có thể kiểm tra null? Các câu trả lời được đăng hoạt động tuyệt vời mặc dù! – xdhmoore

+0

IsNullOrWhiteSpace là một phương thức tĩnh từ đối tượng System.String cách thích hợp để gọi nó trong PowerShell như sau: '[String] :: IsNullOrWhiteSpace ({your string})'. Các dòng lệnh chính xác dựa trên Neil Barnwell bình luận là như sau: '(gc file.txt) | ? {-not [String] :: IsNullOrWhiteSpace ($ _)} | set-content file.txt' – LMA1980

0
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt; 
+0

PS: tôi biết đây là cách cũ trong ngày nhưng một số người khác có thể được hưởng lợi là tốt .. – Nonso

0

này loại bỏ dấu khoảng trắng và dòng trống từ file.txt

PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt 
0

Không cụ thể sử dụng -replace, nhưng bạn sẽ có được hiệu quả tương tự phân tích các nội dung sử dụng -notmatch và regex.

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

Đoạn mã này từ Randy Skretka đang hoạt động tốt cho tôi, nhưng tôi gặp sự cố, rằng tôi vẫn có dòng mới ở cuối tệp.

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

Vì vậy, tôi thêm vào cuối cùng này:

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

Nếu bạn thực sự muốn lọc dòng trống từ một tập tin thì bạn có thể thử điều này:

(gc $ source_file) .Trim() | ? {$ _. Chiều dài -gt 0}

Các vấn đề liên quan