Hola, encontramos la respuesta a tu interrogante, continúa leyendo y la hallarás aquí.
Solución:
No hay mucha documentación sobre los bucles de PowerShell.
La documentación sobre bucles en PowerShell es abundante y es posible que desee consultar los siguientes temas de ayuda: about_For
, about_ForEach
, about_Do
, about_While
.
foreach($line in Get-Content .file.txt)
if($line -match $regex)
# Work here
Otra solución idiomática de PowerShell para su problema es canalizar las líneas del archivo de texto al ForEach-Object
cmdlet:
Get-Content .file.txt | ForEach-Object
if($_ -match $regex)
# Work here
En lugar de la coincidencia de expresiones regulares dentro del bucle, puede canalizar las líneas a través de Where-Object
para filtrar solo aquellos que le interesen:
Get-Content .file.txt | Where-Object $_ -match $regex | ForEach-Object
# Work here
Get-Content
tiene mal desempeño; intenta leer el archivo en la memoria de una sola vez.
El lector de archivos C# (.NET) lee cada línea una por una
Mejor actuación
foreach($line in [System.IO.File]::ReadLines("C:pathtofile.txt"))
$line
O un poco menos eficaz
[System.IO.File]::ReadLines("C:pathtofile.txt") | ForEach-Object
$_
los foreach
declaración será probablemente un poco más rápido que ForEach-Object
(ver comentarios abajo para más información).
El Todopoderoso switch
funciona bien aquí:
'one
two
three' > file
$regex = '^t'
switch -regex -file file
$regex "line is $_"
Producción:
line is two
line is three
Si entiendes que te ha resultado de provecho este post, nos gustaría que lo compartas con más entusiastas de la programación de esta forma contrubuyes a difundir esta información.