Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PowerShell从文本文件中删除空行_Powershell_Text Files_Lines - Fatal编程技术网

使用PowerShell从文本文件中删除空行

使用PowerShell从文本文件中删除空行,powershell,text-files,lines,Powershell,Text Files,Lines,我知道我可以使用: gc c:\FileWithEmptyLines.txt | where {$_ -ne ""} > c:\FileWithNoEmptyLines.txt 删除空行。但是我如何用“-replace”删除它们呢?您不能进行替换,您必须用某物替换某物,而且两者都没有。这将删除空行或仅包含空格字符(制表符/空格)的行 如果还希望排除仅包含空白字符的文件,则可以使用-match代替-eq: @(gc c:\FileWithEmptyLines.txt) -match '\S

我知道我可以使用:

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

删除空行。但是我如何用“-replace”删除它们呢?

您不能进行替换,您必须用某物替换某物,而且两者都没有。

这将删除空行或仅包含空格字符(制表符/空格)的行


如果还希望排除仅包含空白字符的文件,则可以使用-match代替-eq:

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

我在这里找到了一条很好的单行线>>。只是用几行空白行测试了一下,其中只包括换行符,以及只有空格、制表符和组合的行

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

有关代码的一些注释,请参见原文。尼斯:)

这将从file.txt中删除尾随空格和空行

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

不是特别使用
-replace
,而是使用
-notmatch
和regex解析内容时获得相同的效果

(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.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)

如果确实要从文件中筛选空行,则可以尝试以下操作:

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

文件

PS/home/edward/Desktop>
获取内容。/copy.txt

[桌面输入]

名称=口径 Exec=~/Apps/calibre/calibre

Icon=~/Apps/calibre/resources/content server/calibre.png

类型=应用程序*


首先从文件中获取内容,如果在文本文档的每一行中发现任何空白,则修剪空白。这将成为传递给where对象的对象,该对象将通过数组查看字符串长度大于0的数组的每个成员。传递该对象以替换开始时使用的文件的内容。最好是创建一个新文件。。。 最后要做的是读回新制作的文件的内容,看看你的惊人之处

(Get Content./copy.txt).Trim()| Where Object{$\长度-gt 0}| Set Content./copy.txt

获取内容。/copy.txt


要使用正则表达式解决此问题,需要使用多行标志(?m):


你为什么要替换?我的回答用
-替换
,删除空行
Get Content
没有replace参数,因此我假设您正在寻找一种方法来与操作员一起执行。Poowershell是否支持-remove“”来删除员工行?不,它似乎不支持“-remove”。您说的是苹果和橙子。拆卸和更换明显不同。您所拥有的基本上可以工作,但是您可能正在尝试重建现有文件,但没有空白。PS C:\>$text=get content a.txt PS C:\>$text | where{$}out file a.txt我想总的来说我更喜欢
(gc file.txt)|?{-not$\ IsNullOrWhiteSpace()}| set content file.txt
,因为它更清楚地表达了意图,但它相当于同一件事。简单地看一下,我的字符串上似乎没有“IsNullOrWhiteSpace()”方法……而且……实例方法如何检查null?虽然贴出的答案很好用!IsNullOrWhiteSpace是System.String对象中的静态方法在PowerShell中调用它的正确方法如下:
[String]::IsNullOrWhiteSpace({your String})
。基于Neil Barnwell注释的正确命令行如下:
(gc file.txt)|?{-not[String]::IsNullOrWhiteSpace($)}| set content file.txt
这很有效。我试图从一个文件中删除VB6注释,这是我使用的最后一个命令-
(Get Content-Path“\vbXML.cls”)-替换“\'.$”,“-notmatch”^\s*$“| Out file”.\vbXML.uncommented.cls”-Append
>来修复~/Path到完整路径的错误,因为这个文件应该有这样的好处。
(Get Content./copy.txt).Replace(“~/”,“/home/edward/”)|设置内容。/copy.txt
(get-content 'c:\FileWithEmptyLines.txt') -notmatch '^\s*$' > c:\FileWithNoEmptyLines.txt
$content = [System.IO.File]::ReadAllText("file.txt")
$content = $content.Trim()
[System.IO.File]::WriteAllText("file.txt", $content)
((Get-Content file.txt -Raw) -replace "(?m)^\s*`r`n",'').trim() | Set-Content file.txt