2015-03-30 51 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

這就是你至少粘貼了它,至少,這些行是下劃線_,而不是連字符-。嘗試添加'_'事物的列表不匹配