PowerShell эквивалентен grep -f
Я ищу эквивалент PowerShell для grep --file=filename
. Если вы не знаете grep
, имя файла - это текстовый файл, в котором каждая строка имеет шаблон регулярного выражения, который вы хотите сопоставить.
Возможно, мне не хватает чего-то очевидного, но Select-String
похоже не имеет этой опции.
Ответы
Ответ 1
Параметр -Pattern
в Select-String
поддерживает массив шаблонов. Итак, вы ищете:
Get-Content .\doc.txt | Select-String -Pattern (Get-Content .\regex.txt)
Выполняется поиск через текстовый файл doc.txt
с использованием каждого регулярного выражения (по одному на строку) в regex.txt
Ответ 2
PS) new-alias grep findstr
PS) C:\WINDOWS> ls | grep -I -N exe
105:-a--- 2006-11-02 13:34 49680 twunk_16.exe
106:-a--- 2006-11-02 13:34 31232 twunk_32.exe
109:-a--- 2006-09-18 23:43 256192 winhelp.exe
110:-a--- 2006-11-02 10:45 9216 winhlp32.exe
PS) grep /?
Ответ 3
Я не знаком с grep, но с помощью Select-String вы можете сделать:
Get-ChildItem filename.txt | Select-String -Pattern <regexPattern>
Вы также можете сделать это с помощью Get-Content:
(Get-Content filename.txt) -match 'pattern'
Ответ 4
но select-String, похоже, не имеет этой опции.
Правильно. PowerShell не является клоном набора инструментов * nix shells.
Однако создать что-то вроде этого не сложно:
$regexes = Get-Content RegexFile.txt |
Foreach-Object { new-object System.Text.RegularExpressions.Regex $_ }
$fileList | Get-Content | Where-Object {
foreach ($r in $regexes) {
if ($r.IsMatch($_)) {
$true
break
}
}
$false
}
Ответ 5
Может быть,?
[regex]$regex = (get-content <regex file> |
foreach {
'(?:{0})' -f $_
}) -join '|'
Get-Content <filespec> -ReadCount 10000 |
foreach {
if ($_ -match $regex)
{
$true
break
}
}
Ответ 6
Итак, я нашел довольно хороший ответ по этой ссылке:
https://www.thomasmaurer.ch/2011/03/powershell-search-for-string-or-grep-for-powershell/
Но в сущности это:
Select-String -Path "C:\file\Path\*.txt" -Pattern "^Enter REGEX Here$"
Это дает поиск файла каталога (* или вы можете просто указать файл) и поиск содержимого файла в одной строке PowerShell, очень похожей на grep. Выход будет похож на:
doc.txt:31: Enter REGEX Here
HelloWorld.txt:13: Enter REGEX Here