代码之家  ›  专栏  ›  技术社区  ›  Balaji Vignesh

如何在电源外壳中选择多条线路?

  •  2
  • Balaji Vignesh  · 技术社区  · 6 年前

    我在这里使用get content(gc)。我需要删除一组由开始和结束标记定义的行。但由于某些原因,我使用的命令不起作用。你知道我在这里错过了什么吗?

    我尝试过的命令:

    powershell -Command ((gc test.txt) -replace '"/\#start.*\#end/gms"','')
    

    TXT:

    line1
    line2
    #start
    line3
    line4
    #end
    line5
    

    预期输出:

    line1
    line2
    line5
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   TobyU    6 年前

    Get-Content 将文件读取到字符串数组中。使用 Get-Content -Raw 把它读成一个字符串。

    powershell -Command ((Get-Content -Path test.txt -Raw) -replace '(?smi)#start(.*)#end\r?\n','')
    
        2
  •  2
  •   iRon    6 年前

    如@tobyu所回答,使用 -Raw 很容易解决问题,但这种快速解决方案有一个缺点:

    PowerShell在流对象方面非常好,这就是为什么 Get-Content 首先提供一连串的线路。如果您使用 -生 和/或支架,会阻塞输出管道。对于一个小列表来说,这不是一个大问题,但当列表变大时,可能会导致性能问题和/或内存问题。

    对于PowerShell流式处理管道,您可以考虑这样解决它:

    $On = $True; Get-Content -Path test.txt | Where {If ($_ -eq '#start') {$On = $False} ElseIf ($_ -eq '#end') {$On = $True} Else {$On}}
    

    在这个命令中, Where 过滤 #Start #End 因为在这两种情况下都没有输出,当 $on $True .