2008-09-16 5 views
23

Trong Powershell tôi đang đọc trong một tập tin văn bản. Sau đó tôi đang làm một Foreach-Object trên tệp văn bản và tôi chỉ quan tâm đến các dòng KHÔNG chứa các chuỗi có trong $ arrayOfStringsNotInterestedInCó một chuỗi "Powershell" không chứa "cmdlet hoặc cú pháp không?

Có ai biết cú pháp này không?

Get-Content $filename | Foreach-Object {$_} 
+0

Bạn có thể sử dụng * -notmatch * hoặc * -notlike * cùng với mỗi chuỗi trong mảng của bạn. –

Trả lời

35

Nếu $ arrayofStringsNotInterestedIn là một [mảng] bạn nên sử dụng -notcontains :

Get-Content $FileName | foreach-object { ` 
    if ($arrayofStringsNotInterestedIn -notcontains $_) { $) } 

hoặc tốt hơn (IMO)

Get-Content $FileName | where { $arrayofStringsNotInterestedIn -notcontains $_} 
10

Bạn có thể sử dụng toán tử -notmatch để có được những dòng mà không có các ký tự mà bạn đang quan tâm.

 Get-Content $FileName | foreach-object { 
    if ($_ -notmatch $arrayofStringsNotInterestedIn) { $) } 
+0

http://technet.microsoft.com/en-us/magazine/cc137764.aspx –

+0

Có ai thậm chí đã thử điều này không? Khi tôi thử nó cú pháp là không đúng và nó trả về mọi dòng trong tập tin. – OwenP

+3

-không khớp ngay bây giờ. Cảm ơn, hoạt động tốt hơn so với -notcontains cho chuỗi trong một chuỗi – Brent

1

Để loại trừ các dòng có chứa một trong các chuỗi trong $ arrayOfStringsNotInterestedIn, bạn nên sử dụng:

(Get-Content $FileName) -notmatch [String]::Join('|',$arrayofStringsNotInterestedIn) 

Mã Chris đề xuất chỉ hoạt động nếu $ arrayofStringsNotInterestedIn chứa các dòng đầy đủ bạn muốn loại trừ.