【问题标题】:Powershell. Remove Specific Line Numbers电源外壳。删除特定的行号
【发布时间】:2022-01-04 23:32:59
【问题描述】:

我们在一个文件夹中有多个文本文件需要编辑。文本文件是用于 Azure DevOps 的 Multi-Stage Azure Pipelines as code (.yaml),我们需要对其进行更新。我们有特定的行号需要删减,例如我们需要从 30 个文件中删减第 54-68 行,但保留其余代码。此类行的示例:

- stage: DeployWebApps
  variables:
  - group: Environment1
  jobs:
  - job: DeployWebApps
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: AzureFileCopy@3
      displayName: 'Copy ARM Template'
      inputs:
        SourcePath: 'DevOps\IaC\WebApps.json'
        azureSubscription: Development Subscription Service Connection'
        Destination: 'AzureBlob'
        storage: 'xxx'
        ContainerName: 'armtemplates'
        outputStorageUri: 'artifactsLocation'
        outputStorageContainerSasToken: 'artifactsLocationSasToken'
        sasTokenTimeOutInMinutes: '240'

我们想使用我描述的方法,因为第 56 行:

  - group: Environment1

在每个文件中都不同,而其余行相同。在这种情况下,Regex 似乎比 PowerShell 更难编写,并且不能解决在多个文件中替换行的问题。

我发现的最佳方法是在此处的答案中 Powershell remove a range of lines from a text file

如果你想要的内容总是在前 4 行,你可以这样做 这个:

(Get-Content C:\file.txt)[0..3] | set-content C:\outfile.txt

此脚本会删除除第 1-4 行之外的所有内容。我怎样才能只删除第 54-68 行?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这可以按如下方式完成:

    [string[]]$array = Get-Content -Path C:\file.txt
    
    $array[0..52] + $array[68 ..($array.length -1)] | Set-Content C:\outfile.txt
    

    【讨论】:

    • 你可能需要做这个($array.length -1)
    • 是的,你是对的,虽然它可以在没有 -1 的情况下工作,但作为一个准确的答案,我应该将长度设为 -1,我对其进行了修改,谢谢。
    • @MahmoudMoawad 它可以在没有length-1 的情况下工作,因为严格模式已关闭。你永远不知道用户的环境可能是什么模式。
    • @AdminOfThings 感谢您指出这一点,我不知道。
    【解决方案2】:

    在 PowerShell Core (v7+) 中,Select-Object 有一个 -SkipIndex 参数,允许使用管道跳过多行。

    Get-Content -Path file.txt | Select-Object -SkipIndex (53..67) |
        Set-Content output.txt
    

    请注意,-SkipIndex 会跳过实际的索引号(从0 开始),而不是-Skip 要求的行数。

    【讨论】:

      【解决方案3】:

      这是一个奇怪的解决方案,它使用了 get-content 返回的隐藏 readcount 属性。

      # get-content c:\file.txt | select *
      get-content c:\file.txt | where readcount -notin (54..68) | 
        set-content c:\outfile.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-15
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        相关资源
        最近更新 更多