2015-03-30 52 views
0

我有一个包含数据的庞大安装这样的文件:如何将线下划线的模式匹配后

______________________________________________________________________ 

.   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钻头

1-11/32 TCS钻头

1-11/32 TCS钻头

.....

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

,我可以用线条没有任何这些字符“=”的匹配,“+”,“ - ”,但这种模式是不准确的,不工作...

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

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

回答

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+"} 
+0

我用'GET-Childitem $文件进行这方面的工作| select-string -pattern'_'-Context 0,2',但是这个在结果中包含'____',我会试试你的。谢谢 – 2015-03-30 18:25:25

+0

我可以问''''r'n“'是什么意思? r&n? – 2015-03-30 18:28:43

+0

@RootLoop''''r'n“''是回车符和换行符的PowerShell字符。 – Matt 2015-03-30 18:31:28

0

这就是你至少粘贴了它,至少,这些行是下划线_,而不是连字符-。尝试添加'_'事物的列表不匹配