gpt4 book ai didi

powershell - 如何在文本文件中搜索第一行和最后一行?

转载 作者:行者123 更新时间:2023-12-04 16:47:36 39 4
gpt4 key购买 nike

我只需要在文本文件中搜索第一行和最后一行,即可找到“-”并将其删除。
我该怎么做?
我尝试了选择字符串,但是我不知道找到第一行和最后一行,只从那里删除“-”。

文本文件如下所示:

 % 01-A247M15 G70 
N0001 G30 G17 X-100 Y-100 Z0
N0002 G31 G90 X100 Y100 Z45
N0003 ; --PART NO.: NC-HON.PHX01.COVER-SHOE.DET-1000.050
N0004 ; --TOOL: 8.55 X .3937
N0005 ;
N0006 % 01-A247M15 G70

像这样吗?
$1 = Get-Content C:\work\test\01.I

$1 | select-object -index 0, ($1.count-1)

最佳答案

好的,所以看了一段时间之后,我决定必须有一种方法可以做到这一点。这里是:

(gc "c:\myfile.txt") | % -Begin {$test = (gc "c:\myfile.txt" | select -first 1 -last 1)} -Process {if ( $_ -eq $test[0] -or $_ -eq $test[-1] ) { $_ -replace "-" } else { $_ }} | Set-Content "c:\myfile.txt"

这是此操作的分割:

首先,现在熟悉的人的别名。我仅将它们放入是因为该命令足够长,因此这有助于使事情易于管理:
  • gc表示Get-Content
  • %表示Foreach
  • $_用于当前管道值(这不是别名,但是我想我会定义它,因为您说的是新的)。

    好的,现在这是正在发生的事情:
  • (gc "c:\myfile.txt") |->获取c:\myfile.txt的内容并沿
  • 行发送
  • %->是否进行foreach循环(分别遍历管道中的每个项目)
  • -Begin {$test = (gc "c:\myfile.txt" | select -first 1 -last 1)}->这是一个begin块,它将在运行所有内容之前运行到管道中。它将c:\myfile.txt的第一行和最后一行加载到数组中,因此我们可以检查
  • 的第一项和最后一项
  • -Process {if ( $_ -eq $test[0] -or $_ -eq $test[-1] )->这将检查管道中的每个项目,检查它是
  • 文件中的第一项还是最后一项
  • { $_ -replace "-" } else { $_ }->如果是第一个或最后一个,它将进行替换;如果不是,则将其保留下来
  • | Set-Content "c:\myfile.txt"->这会将新值放回文件中。

  • 请访问以下站点,以获取有关每个项目的更多信息:

    Get-Content uses
    Get-Content definition
    Foreach
    The Pipeline
    Begin and Process是Foreach的一部分(通常用于自定义功能,但它们也可以在foreach循环中使用)
    If ... else陈述
    Set-Content

    所以我在考虑如果您想对许多文件执行此操作,或者想经常执行此操作。我决定做一个可以满足您要求的功能。这是函数:
    function Replace-FirstLast {
    [CmdletBinding()]
    param(
    [Parameter( `
    Position=0, `
    Mandatory=$true)]
    [String]$File,
    [Parameter( `
    Position=1, `
    Mandatory=$true)]
    [ValidateNotNull()]
    [regex]$Regex,
    [Parameter( `
    position=2, `
    Mandatory=$false)]
    [string]$ReplaceWith=""
    )

    Begin {
    $lines = Get-Content $File
    } #end begin

    Process {
    foreach ($line in $lines) {
    if ( $line -eq $lines[0] ) {
    $lines[0] = $line -replace $Regex,$ReplaceWith
    } #end if
    if ( $line -eq $lines[-1] ) {
    $lines[-1] = $line -replace $Regex,$ReplaceWith
    }
    } #end foreach
    }#End process

    end {
    $lines | Set-Content $File
    }#end end

    } #end function

    这将创建一个名为 Replace-FirstLast的命令。它将被这样称呼:
    Replace-FirstLast -File "C:\myfiles.txt" -Regex "-" -ReplaceWith "NewText"
    -Replacewith是可选的,如果为空,它将被删除( ""的默认值)。 -Regex正在寻找一个正则表达式来匹配您的命令。有关将其放入您的个人资料的信息,请检查 this article

    请注意:如果文件很大(几个GB),这不是最佳解决方案。这将导致整个文件保留在内存中,这可能会导致其他问题。

    关于powershell - 如何在文本文件中搜索第一行和最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14402603/

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