Por lo tanto, tengo varios archivos de texto grandes que necesito clasificar y eliminar todas las apariciones de líneas que contienen una palabra clave determinada. Básicamente, si tengo estas líneas:
Esto no es una prueba
Esto es una prueba
Tal vez una prueba
Definitivamente no es una prueba
Y ejecuto el script con 'no', necesito eliminar por completo las líneas 1 y 4.
He estado intentando con:
PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") |
Foreach-Object {$_ -replace "3*Program*", ""} |
Set-Content "D:\Logs\co2.txt"
pero solo reemplaza el 'Programa' y no toda la línea.
windows-7
powershell
script
karel
fuente
fuente
Set-Content
? No creo queSet-Content
sea un reemplazo directoOut-File
.Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt
Out-File es básicamente Set-Content, pero ejecuta la entrada a través del formato predeterminado en lugar de la simple conversión de cadena.Esto funcionará:
fuente
También puede usar 'Seleccionar cadena' con la opción -notmatch:
fuente
Solo necesitaba que esto funcionara y se me ocurrió lo siguiente:
La clave es que el 'Objeto Where' que usa un bloque de script (como se indica con las llaves) requiere declarar la variable en un evento de creación de bloque de script, de ahí el
línea.
Al estructurarlo de esta manera, se puede crear una función, pasarle una cadena de texto para que coincida parcialmente, realizar la creación del bloque de script con el valor pasado y hacer que funcione correctamente.
Las respuestas anteriores no explican correctamente cómo pasar el valor a reemplazar dentro de una variable.
fuente