2016-02-02 65 views
-1

我試圖讓一個腳本,執行以下操作:爲什麼慣於此PowerShell腳本執行

  1. 打印出文件
  2. 刪除任何空行
  3. 過濾掉不包含所有行單詞「重新分配」
  4. 從每行開頭刪除任何空格和「>」的

一切工作正常,直到我在加函數第4步,之後powershell吐出一堆錯誤。我在這裏做錯了什麼?

PS C:\Users\pzsr7z.000\Desktop\incidentoutput> cat .\csvtest.txt | ? {$_.trim() -ne "" } | sls "^Reassignment$" -Context 1,2 | foreach{ $_.TrimStart(">"," ")} 
Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'. 
At line:1 char:90 
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")} 
+     ~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'. 
At line:1 char:90 
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")} 
+     ~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'. 
At line:1 char:90 
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")} 
+     ~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'TrimStart'. 
At line:1 char:90 
+ ... 1,2 | foreach{ $_.TrimStart(">"," ")} 
+     ~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

所有的功能都是單獨工作的,當我嘗試在最後一部分添加時,事情就會被搞砸了。

+0

不含... ???什麼? – lit

回答

3

我的精神力量告訴我,您試圖使用StringTrimStart方法對Select-String cmdlet返回的MatchInfo對象。

嘗試將其第一投給字符串:

... | sls "^Reassignment$" -Context 1,2 | foreach{ $_.ToString().TrimStart(">"," ") 
+0

你好,當我嘗試使用它時,修剪功能似乎只處理匹配輸出的第一行(請參閱截圖的鏈接)http://imgur.com/GHggNEs而不是所有行。什麼會導致它做到這一點? – lacrosse1991

+0

@ lacrosse1991那麼,我不知道爲什麼它可以爲你工作。你正在讀取數組的內容(每行是數組的一個元素),然後用'Select-String'匹配每個元素。但是這意味着沒有'Select-String'返回的上下文,因爲它只能看到一行。你能提供一個你的'csvtest.txt'文件的例子嗎?它是否與[先前的問題]相同(http://stackoverflow.com/questions/35140874/how-can-i-combine-multiple-groups-of-lines-in-a-file)? – beatcracker

+0

你好,抱歉,花了這麼久回覆。儘管我採取了不同的路線,但我最終得到了它的工作。這個腳本如何看待你?我是powershell的新手(昨天剛剛開始,以前只做過perl,bash和一些python,bash是我最喜歡的),所以我會很感激你的任何意見。由於pastebin/textsharing網站在網絡上被阻止,我只截取了屏幕截圖。 腳本:http://imgur.com/wD2cXxI 輸入:http://imgur.com/JNTpSTx(從一個大的文本文件文本的樣品,我處理在同一時間多個文件) 輸出: HTTP:// imgur。com/C9J4IDl – lacrosse1991

1

這正則表達式:^Reassignment$將只匹配與確切Reassignment線 - 不是包含Reassignment所有行。

當您正在使用Get-Contentcat)來讀取文件中的行,你可以如用-match操作上的所有線路(-cmatch用於區分大小寫):

(cat .\csvtest.txt) -cmatch 'Reassignment' 

-match操作人員只需返回匹配的字符串,這樣你就可以直接對這些呼籲TrimStart()

$ReassignmentLines = (cat .\csvtest.txt) -cmatch 'Reassignment' |ForEach-Object { 
    $_.TrimStart(">"," ") 
}