gpt4 book ai didi

powershell - 当行为空/空白时,如何有效地删除多行字符串的最后一行?

转载 作者:行者123 更新时间:2023-12-02 23:51:07 42 4
gpt4 key购买 nike

我正在尝试从其他sqlcmd输出文件中删除底部的空白行(如果有其他供应商)。

$List=Get-ChildItem * -include *.csv
foreach($file in $List) {
$data = Get-Content $file
$name = $file.name
$length = $data.length -1
$data[$length] = $null
$data | Out-File $name -Encoding utf8
}

删除空白行需要很长时间。有人知道更有效的方法吗?

最佳答案

使用Get-Content -Raw将整个文件作为单个字符串加载到内存中并对该字符串进行操作可以最大程度地提高速度。

尽管这并非总是取决于文件大小的选项,但您提到了sqlcmd文件,可以认为该文件足够小。

注意:

  • 空行是指完全空白或仅包含空格(换行符除外)的行。
  • 修剪后的字符串在最后一行之后将没有最终终止的换行符,但是如果将其传递给Set-Content(或Out-File),则默认情况下会附加一个;使用-NoNewline可以抑制这种情况,但是,尤其是在类Unix平台上,则不能这样做,即使文本文件的最后一行也应具有结尾的换行符。
  • 除非另有说明,否则非空白行上的尾随(或前导)空格不会被修剪。
  • 解决方案使用在 -replace operator上运行的regexes (regular expressions)

  • 删除所有尾随的空白行:

    注意:如果您真的只想删除最后一行(如果它是空白的话),请参见下面的倒数第二个解决方案。
    (Get-Content -Raw $file) -replace '\r?\n\s*$'

    在命令的上下文中(稍作修改):
    Get-ChildItem -Filter *.sqlcmd | ForEach-Object {
    (Get-Content -Raw $_.FullName) -replace '\r?\n\s*$' |
    Set-Content $_.FullName -Encoding utf8 -WhatIf # save back to same file
    }

    注意:上面命令中的 -WhatIf common parameter预览操作。确定操作将执行所需操作后,删除 -WhatIf

    如果也可以从最后一个非空白行修剪尾随空格,这是可以接受的/可以的,您可以更简单地编写:
    (Get-Content -Raw $file).TrimEnd()

    删除文件中出现的所有空白行:
    (Get-Content -Raw $file) -replace '(?m)\A\s*\r?\n|\r?\n\s*$'

    这是一个从概念上讲简单得多的版本,它在没有 Get-Content的情况下对 -Raw输出的行数组进行操作(并且还返回一个数组),但是它的性能要差得多。
    @(Get-Content $file) -notmatch '^\s*$'

    请勿将其与 Set-Content / Out-Content -NoNewline结合使用,因为这将直接连接存储在数组元素中的行,而在它们之间没有换行符。没有 -NoNewline,您总是会在最后一行之后得到一个终止的换行符。

    如果最后一行为空,则仅删除:
    (Get-Content -Raw $file) -replace '\r?\n[ \t]*\Z'

    注意:
  • [ \t]匹配空格和制表符,而\s通常匹配所有形式的Unicode空格,包括ASCII范围之外的空格。
  • 在这种情况下,文件末尾的可选尾随换行符(以终止最后一行)不被视为空行-不管是否存在这样的换行符都不会造成任何影响。


  • 无条件删除最后一行,无论是否为空白:
    (Get-Content -Raw $file) -replace '\r?\n[^\n]*\Z'

    注意:
  • 在这种情况下,文件末尾的可选尾随换行符(以终止最后一行)不被视为空行-不管是否存在这样的换行符都不会造成任何影响。
  • 如果要删除最后一个非空白行,请使用(Get-Content -Raw $file).TrimEnd() -replace '\r?\n[^\n]*\Z'
  • 关于powershell - 当行为空/空白时,如何有效地删除多行字符串的最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173834/

    42 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com