Pregunta de Powershell: ¿Cómo puedo eliminar líneas a partir de una posición determinada?
Tengo 2 preguntas:
- Pregunta:
Tengo un archivo .txt y busco con PowerShell una palabra en él:
Mi código:
Select-String .\example.txt -pattern "myword" | select -ExpandProperty line
Muy bien. PowerShell encontró la palabra dentro de la línea 63.
Después de la línea 63, el archivo .txt tiene x líneas más, y todas ellas deberían eliminarse.
¿Cómo se puede hacer esto?
get-content .\example.txt | select-string -pattern 'myword' -notmatch | Out-File .\new_example.txt
Esto solo eliminó la línea 63. Sin embargo, esta debería permanecer y solo el resto debería eliminarse.
- Pregunta:
Casi lo mismo. Busco dos conteos, Ejemplo: 12 y 33 en el .txt
PowerShell no encontró 12a y 33a.
Está bien. PowerShell debería buscar “11a hasta 56a” y limpiar las líneas “10a” y “123a”.
Archivo .txt de ejemplo:
10a,
11a,
21a,
20w,
32a,
56a,
123a,
El archivo .txt deseado:
11a,
21a,
20w,
32a,
56a,
¿Cómo puedo hacerlo? Espero mucho que puedas ayudarme con estos problemas.
Gracias.
davy.ai
Respuestas:
Aquí, primero obtenemos el contenido del archivo en la variable
$contenido
. Luego encontramos el número de línea de la palabra buscada usandoSelect-String
y restamos 1 para obtener el índice de la última línea que queremos conservar. Luego usamosSelect-Object
para seleccionar solo las líneas hasta ese índice y lo enviamos a un nuevo archivo usandoOut-File
. Esto creará un nuevo archivo solo con las líneas deseadas.Para buscar dos conteos (
12
y33
) y excluir líneas que contengan12a
y33a
, se puede usar el siguiente código:Aquí, usamos
Get-Content
para obtener el contenido del archivo en la variable$contenido
. Luego enviamos esto a un filtroWhere-Object
para excluir las líneas que contengan12a
y33a
usando el operador-notmatch
. También usamos el operador-match
para buscar líneas que contengan12
o33
, pero con una letraa
inmediatamente después, usando el patrón regex(\b1[2-9]|2[0-9]|3[0-3])a
. Esto coincidirá con cualquier número entre 12 y 33, seguido de la letraa
. Luego enviamos las líneas filtradas a un nuevo archivo usandoOut-File
. Esto creará un nuevo archivo solo con las líneas deseadas.