Я пытаюсь найти все файлы, которые не содержат выбранную строку. Найти файлы, которые содержат, легко:Найти файлы, которые не содержат выбранную строку
gci | select-string "something"
но у меня нет идеи, как отменить это утверждение.
Я пытаюсь найти все файлы, которые не содержат выбранную строку. Найти файлы, которые содержат, легко:Найти файлы, которые не содержат выбранную строку
gci | select-string "something"
но у меня нет идеи, как отменить это утверждение.
Я не уверен, если это может быть сделано без foreach-object
, но это работает:
gci |foreach-object{if (-not (select-string -inputobject $_ -Pattern "something")){$_}}
Вы можете использовать Where-Object
;
gci | Where-Object { !($_ | Select-String "something" -quiet) }
Как mentionend в How do I output lines that do not match 'this_string' using Get-Content and Select-String in PowerShell?
Select-String имеет параметр NotMatch
.
Таким образом, вы можете использовать его:
gci | Select-String -notmatch "something"
wow - 3 downvotes - но почему? – Bohne
Я хотел бы также использовать переключатель '-List', то есть' Select-String, ... -List' для того, чтобы сделать это более эффективно, по-видимому, потому, что мы не нужны все найденные совпадения. –
И еще одна вещь. Этот код также возвращает каталоги. Чтобы этого избежать, я бы использовал 'gci-File' (по крайней мере, в PowerShell V3). –
'Where-Object' может сделать его еще проще. 'gci -File | Where-Object {! (Select-String -InputObject $ _ -Pattern "something" -List)} ' –