如何在下划线图案后匹配一条线

时间:2015-03-30 17:27:50

标签: powershell

我有一个包含大量数据的文件,如下所示:

______________________________________________________________________

.         1-9/16 TCS DRILL                  

.          CUT = +2.685 / O/A = -2.685
.                +2.685 /       -2.685
.                +3.935 /       -3.935
______________________________________________________________________

.         1-11/32 TCS DRILL                  

.          CUT = +0.9 / O/A = -3.237
.                +0.9 /       -3.237
.                +0.9 /       -4.487
___________________________________________________________________

.         1-11/32 TCS DRILL                  

.          CUT = +5.699 / O/A = -5.699
__________________________________________________________________

.         1-1/8 TCS DRILL                  

.          CUT = +1.553 / O/A = -1.553
.                +2.338 /       -2.338
.                +2.513 /       -2.513 

我需要做的是在每个“_______”之后抓住第一行文字(下划线),

1-9 / 16 TCS DRILL

1-11 / 32 TCS DRILL

1-11 / 32 TCS DRILL

.....

如何在powershell中指定模式以使用get-content或get-childitem匹配LINE?

我可以用来匹配没有任何字符“=”,“+”,“ - ”的行,但这种模式不准确且不起作用......

$file = 'C:\test\001.txt'

Get-Childitem $file | select-string -pattern '=','+','-' -notmatch

2 个答案:

答案 0 :(得分:1)

我会尝试使用您的示例数据(在文本文件$file中)

(Get-Content -Raw $file) -split "_+" | 
    Where-Object{$_} | 
    ForEach-Object{$_ -split "`r`n" | Select -Index 2}

只需使用-Raw一次读取整个文件,然后-split下划线组中的文件。使用Where-Object过滤掉空条目,因为文件开头会有一个条目。

对于从该过程中获得的每个块,我们将其拆分为换行符。由于前两行是空格,我们使用-Index来获取包含您要查找的内容的第一行数据。

示例输出

.         1-9/16 TCS DRILL                  
.         1-11/32 TCS DRILL                  
.         1-11/32 TCS DRILL                  
.         1-1/8 TCS DRILL 

要删除前导句点和后续空格,我们可以对循环进行小的更新

ForEach-Object{($_ -split "`r`n" | Select -Index 2) -replace "^\.\s+"}

答案 1 :(得分:0)

您粘贴它的方式,至少线条是下划线_,而不是连字符-。尝试将'_'添加到不匹配的列表