私が使用できることを知っています:
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
コードに関する注記については、オリジナルを参照してください。いいね:)
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)
空白文字のみを含むファイルも除外する場合は、代わりに-matchを使用できます。
@(gc c:\FileWithEmptyLines.txt) -match '\S' | out-file c:\FileWithNoEmptyLines
特に-replace
を使用していませんが、-notmatch
と正規表現を使用してコンテンツを解析すると同じ効果が得られます。
(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
(Get-Content c:\FileWithEmptyLines.txt) |
Foreach { $_ -Replace "Old content", " New content" } |
Set-Content c:\FileWithEmptyLines.txt;
ファイルから空白行を実際にフィルタリングしたい場合は、これを試してください:
(gc $ source_file).Trim()| ? {$ _。Length -gt 0}
置き換えることはできません。SOMETHINGをSOMETHINGに置き換える必要がありますが、両方はありません。
ファイル
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
これにより、空の行または空白文字(タブ/スペース)のみの行が削除されます。
[IO.File]::ReadAllText("FileWithEmptyLines.txt") -replace '\s+\r\n+', "`r`n" | Out-File "c:\FileWithNoEmptyLines.txt"
これにより、file.txtから末尾の空白と空白行が削除されます
PS C:\Users\> (gc file.txt) | Foreach {$_.TrimEnd()} | where {$_ -ne ""} | Set-Content file.txt