首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用powershell从第n行到第n行在两个字符串之间打印行

如何使用powershell从第n行到第n行在两个字符串之间打印行
EN

Stack Overflow用户
提问于 2020-11-27 05:15:08
回答 1查看 139关注 0票数 1

我很难用powershell在两个字符串之间从第n行打印到第n行。从下面的样本数据,我想打印‘’?到'Jammer‘之间的线,除了后面的第一行?到output.txt。

这是我的样本数据sample.txt

代码语言:javascript
复制
--------                                                                  
C:\test\1528372320775.xml                      
C:\test\fail\1528372320775_877291.xml            
C:\test\outgoing\1528372320775_xexAx2111.xml
   Jammer: 2C339A2A:138814                                                                                         
--------                                                                     
C:\test\244124414.xml                      
C:\test\fail\244124414_232423.xml            
C:\test\outgoing\244124414_xexAx21333.xml
   Jammer: 8373SDF4:138814                                                                                  
--------
C:\test\832492892387.xml                      
C:\test\fail\832492892387_2SU2932.xml             
C:\test\outgoing\832492892387_xexAx23232.xml
   Jammer: 3G380DD2A:338783                                                                                  
--------
C:\test\23234923427.xml                      
C:\test\fail\23234923427_2SLLE.xml               
C:\test\outgoing\23234923427_xexAx2233.xml
C:\test\exeption\23234923427_xexAx2233.xml
   Jammer: 3883BB3SC:311314                                                                                  
--------

预期产出: output.txt

代码语言:javascript
复制
C:\test\fail\1528372320775_877291.xml            
C:\test\outgoing\1528372320775_xexAx2111.xml
C:\test\fail\244124414_232423.xml            
C:\test\outgoing\244124414_xexAx21333.xml
C:\test\fail\832492892387_2SU2932.xml             
C:\test\outgoing\832492892387_xexAx23232.xml
C:\test\fail\23234923427_2SLLE.xml               
C:\test\outgoing\23234923427_xexAx2233.xml
C:\test\exeption\23234923427_xexAx2233.xml

到目前为止,我已经尝试过这样做,并且能够得到字符串之间的行数,但无法打印所需的输出。有人能建议我如何做到这一点吗?提前谢谢。

代码语言:javascript
复制
$file = "C:\Sample.txt"
$start="--------"
$end="Jammer"

$lines = (Select-String -Path $file -Pattern $start).LineNumber
$endlines = (Select-String -Path $file -Pattern $end).LineNumber

#Write-Host $endlines
#$lines.Count
#$endlines.Count

$i=0;
foreach($endline in $endlines) 
{
   $numberoflines = ($endline - $lines[$i] -1)
   $linetoprint = $lines[$i]+1
   
  for($j=1; $j-eq$j+$numberoflines; $j++) 
  {
     Get-Content $file | Select -Index $linetoprint
  }
  Write-Host $numberoflines
  $i++;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 08:01:43

您可以尝试使用regex,但更简单的解决方案是在处理每一行时使用一个简单的状态机来确定

  • 您刚刚读到了一个‘

示例

代码语言:javascript
复制
@'
--------                                                                  
C:\test\1528372320775.xml                      
C:\test\fail\1528372320775_877291.xml            
C:\test\outgoing\1528372320775_xexAx2111.xml
   Jammer: 2C339A2A:138814                                                                                         
--------                                                                     
C:\test\244124414.xml                      
C:\test\fail\244124414_232423.xml            
C:\test\outgoing\244124414_xexAx21333.xml
   Jammer: 8373SDF4:138814                                                                                  
--------
C:\test\832492892387.xml                      
C:\test\fail\832492892387_2SU2932.xml             
C:\test\outgoing\832492892387_xexAx23232.xml
   Jammer: 3G380DD2A:338783                                                                                  
--------
C:\test\23234923427.xml                      
C:\test\fail\23234923427_2SLLE.xml               
C:\test\outgoing\23234923427_xexAx2233.xml
C:\test\exeption\23234923427_xexAx2233.xml
   Jammer: 3883BB3SC:311314                                                                                  
--------
'@ -split "`r`n" | % {
    switch -Regex ($_) {
        '--------' {$skipnext=$true}
        '^C:\\test' {if ($skipnext) {$skipnext = $false} else {$_}}
    }
}

应用于您的文件

代码语言:javascript
复制
switch -File (gc <yourfile>) -Regex {
    '--------' {$skipnext=$true}
    '^C:\\test' {if ($skipnext) {$skipnext = $false} else {$_}}
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65032401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档