content - PowerShell equivalente a grep-f
search in powershell (6)
Estoy buscando el equivalente de PowerShell a grep --file=filename
. Si no conoce grep
, filename es un archivo de texto en el que cada línea tiene un patrón de expresión regular con el que desea coincidir.
Tal vez me falta algo obvio, pero Select-String
no parece tener esta opción.
pero select-String no parece tener esta opción.
Correcto. PowerShell no es un clon del conjunto de herramientas * nix shells.
Sin embargo, no es difícil construir algo como usted mismo:
$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
}
¿Tal vez?
[regex]$regex = (get-content <regex file> |
foreach {
''(?:{0})'' -f $_
}) -join ''|''
Get-Content <filespec> -ReadCount 10000 |
foreach {
if ($_ -match $regex)
{
$true
break
}
}
Así que encontré una muy buena respuesta en este enlace: https://www.thomasmaurer.ch/2011/03/powershell-search-for-string-or-grep-for-powershell/
Pero esencialmente es:
Select-String -Path "C:/file/Path/*.txt" -Pattern "^Enter REGEX Here$"
Esto proporciona una búsqueda de archivos de directorio (* o simplemente puede especificar un archivo) y una búsqueda de contenido de archivos en una línea de PowerShell, muy similar a grep. La salida será similar a:
doc.txt:31: Enter REGEX Here
HelloWorld.txt:13: Enter REGEX Here
El parámetro -Pattern
en Select-String
admite una matriz de patrones. Entonces, lo que estás buscando es:
Get-Content ./doc.txt | Select-String -Pattern (Get-Content ./regex.txt)
Esto busca a través del doc.txt
de texto doc.txt
usando cada expresión regular (una por línea) en regex.txt
No estoy familiarizado con grep pero con Select-String puedes hacer:
Get-ChildItem filename.txt | Select-String -Pattern <regexPattern>
También puedes hacer eso con Get-Content:
(Get-Content filename.txt) -match ''pattern''
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 /?