web-dev-qa-db-ja.com

PowerShellを使用してテキストファイルから空の行を削除する

私が使用できることを知っています:

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

空の行を削除します。しかし、「-replace」でそれらを削除するにはどうすればよいですか?

22
Suliman

ここでニースワンライナーを見つけました>> http://www.pixelchef.net/remove-empty-lines-file-powershell 。改行だけでなく、スペース、タブ、および組み合わせのみの行を含むいくつかの空白行でテストしました。

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

コードに関する注記については、オリジナルを参照してください。いいね:)

45
Randy Skretka

Randy Skretkaのこのコードはうまく機能していますが、ファイルの最後に改行が残っているという問題がありました。

(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)
14
Rainer

空白文字のみを含むファイルも除外する場合は、代わりに-matchを使用できます。

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

特に-replaceを使用していませんが、-notmatchと正規表現を使用してコンテンツを解析すると同じ効果が得られます。

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
3
joel
(Get-Content c:\FileWithEmptyLines.txt) | 
    Foreach { $_ -Replace  "Old content", " New content" } | 
    Set-Content c:\FileWithEmptyLines.txt;
1
Nonso

ファイルから空白行を実際にフィルタリングしたい場合は、これを試してください:

(gc $ source_file).Trim()| ? {$ _。Length -gt 0}

1
Max

置き換えることはできません。SOMETHINGをSOMETHINGに置き換える必要がありますが、両方はありません。

1
user1129665

ファイル

PS/home/edward/Desktop> Get-Content ./copy.txt

[デスクトップエントリ]

名前= calibre Exec =〜/ Apps/calibre/calibre

Icon =〜/ Apps/calibre/resources/content-server/calibre.png

タイプ=アプリケーション*


ファイルからコンテンツを取得することから始めて、テキストドキュメントの各行にスペースが見つかった場合は空白を削除します。これがwhere-objectに渡されるオブジェクトになり、配列を通過して0より大きい文字列長を持つ配列の各メンバーを調べます。そのオブジェクトは、開始したファイルのコンテンツを置き換えるために渡されます。おそらく新しいファイルを作成する方が良いでしょう...最後に行うことは、新しく作成されたファイルのコンテンツを読み戻して、あなたの素晴らしさを確認することです。

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

Get-Content ./copy.txt

0
Edward Thomas

これにより、空の行または空白文字(タブ/スペース)のみの行が削除されます。

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

これにより、file.txtから末尾の空白と空白行が削除されます

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