powershell - 如何使用powershell在两个字符串之间从第n行打印到第n行
问题描述
我正在努力使用powershell在两个字符串之间打印从第n行到第n行的行。从下面的示例数据中,我想打印 '--------' 到 'Jammer' 之间的行,除了 '---------' 到 output.txt 之后的第一行
这是我的样本数据 sample.txt
--------
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
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
这是我迄今为止尝试过的,我能够获得字符串之间的行数,但无法打印所需的输出。有人可以建议我如何实现这一目标。提前致谢。
$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++;
}
解决方案
您可以尝试使用正则表达式,但更简单的解决方案是在处理每一行以确定是否
- 您刚刚阅读了'-------'并且需要跳过下一行
- 如果该行以 开头
C:\test
,则应输出该行
例子
@'
--------
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 {$_}}
}
}
应用于您的文件
switch -File (gc <yourfile>) -Regex {
'--------' {$skipnext=$true}
'^C:\\test' {if ($skipnext) {$skipnext = $false} else {$_}}
}
}
推荐阅读
- sql - 当主键在sql中已知时,如何对特定单元格进行外键引用?
- xml - 从 xml 文件中获取属性值
- javascript - 在容器外单击时模态停止工作
- javascript - 如何从 JS 中的 JSON 键中获取值?
- python - 使用 Python:从 postgres DB 中提取表作为 CSV 文件并将当前日期列添加到 CSV 文件
- google-chrome - Chrome 72 在扩展的内容脚本中阻止 XHR
- python - 当我为测试准确性运行时出现“RuntimeError: Attempted to use a closed Session”
- tensorflow - 在 Keras 中使用嵌入层和 LSTM 作为输入的 3 维数组
- xpath - Xpath 基于 span 类抓取 div 内容
- mysql-python - Python 没有与 SQL 连接