gpt4 book ai didi

powershell - 在特定模式之后的一行添加一行文本

转载 作者:行者123 更新时间:2023-12-02 23:28:01 24 4
gpt4 key购买 nike

作为一个小型个人项目的一部分,我正在尝试学习一些Powershell脚本。

我要解决的当前问题是,为每个文件指定一个包含数百个ASCII文本文件的文件夹:

  • 查找.txt文件中特定文本的行(可能没有,可能有多个)
  • (如果没有),在(结果文件的)第3行上添加新文本
  • (如果有一个或多个),在第一次命中
  • 之前将新文本添加为​​新行

    我设法找出线的位置
    gci -literalpath "C:\path" -rec -filter *.txt | % {
    $line = Select-String -literalpath $_.fullname -pattern "foo_bar" | select LineNumber
    }

    而且我知道如何在特定的行号处添加一行(在这种情况下,结果文件的第三行)
    gci -literalpath "C:\path" -rec -filter *.txt | % {
    $file = get-Content -literalpath $_.fullname
    set-content -literalpath $_.fullname -value ($file[0..1] + "newline" + $file[2..($file.Length-1)])
    }

    我遇到的问题是,我似乎无法使用 $line,我期望使用 int(因为 LineNumber是),但是如果我输入 $line.GetType(),我会得到 PSCustomObject作为答案,但我找不到从中提取整数值的方法它,就在那里,如果我打印 $line,我得到的输出类似于
    LineNumber
    -------------
    4
    5
    10

    我想念什么吗?有没有更简单的方法来实现我想要的?

    最佳答案

    您可以这样获得行号:

    $line.LineNumber

    或者您可以这样做:
    gci -literalpath "C:\path" -rec -filter *.txt | % {
    $line = Select-String -literalpath $_.fullname -pattern "foo_bar" | select -ExpandProperty LineNumber
    }

    在这种情况下,您将拥有一个整数变量。请注意,如果有多个匹配项,它将是一个数组而不是一个整数。

    为了将来的努力,cmdlet Get-Member可能会帮助您探索PSObjects。

    用法示例: $line | get-member

    关于powershell - 在特定模式之后的一行添加一行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905044/

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